c++ /CLR (c++互操作)基本问题:)



我有一些关于c++/CLR c++互操作(基本上混合了c++非托管和托管代码)的问题。

  1. 如果我用c++/CLR创建一个应用程序,并编写非托管和托管代码,例如:

    int main(int argc, char*argv[])
    {
        int a = 30;                                   
        int* a_ptr = &a;                              
        std::cout << a_ptr << std::endl;              
        Console::WriteLine("This is managed code");   
    }
    

由于第4行是托管的。net代码,它将通过CLR。但前三行也要经过CLR处理,还是单独处理?如果我在CLR项目中只写c++非托管代码,会降低性能吗?

  • c++/CLR项目是否改变了c++语言中的任何东西,例如原语或类似的东西?

  • 它是如何工作的?如果CLR检测到命令使用它,它是如何被调用的…还是所有东西都经过它?

    1. 。性能将是一样的。在c++ CLI中,函数可以是托管的,也可以是非托管的。不管一个函数是否是托管的,它们在jit之后都等于处理器。因此,从本机函数到托管函数的调用与本机->本机,托管->托管并没有太大的不同。唯一的大区别发生在传递参数的时候。根据具体情况,一些参数被从一个世界封送到另一个世界。如果发生这种情况,你就会失去性能。(返回值也是如此)。在您的示例中,没有跨世界参数传递或返回,因此没有性能开销。

    2. 。一切都保持不变。

    3. 从托管到非托管使用内部调用机制,就像CLR本身一样。从托管到非托管,它只是调用地址。本机函数不关心是否调用托管代码(参数封送除外)。

    相关内容

    • 没有找到相关文章

    最新更新