我有一些关于c++/CLR c++互操作(基本上混合了c++非托管和托管代码)的问题。
-
如果我用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检测到命令使用它,它是如何被调用的…还是所有东西都经过它?
-
。性能将是一样的。在c++ CLI中,函数可以是托管的,也可以是非托管的。不管一个函数是否是托管的,它们在jit之后都等于处理器。因此,从本机函数到托管函数的调用与本机->本机,托管->托管并没有太大的不同。唯一的大区别发生在传递参数的时候。根据具体情况,一些参数被从一个世界封送到另一个世界。如果发生这种情况,你就会失去性能。(返回值也是如此)。在您的示例中,没有跨世界参数传递或返回,因此没有性能开销。
-
。一切都保持不变。
-
从托管到非托管使用内部调用机制,就像CLR本身一样。从托管到非托管,它只是调用地址。本机函数不关心是否调用托管代码(参数封送除外)。