首页 > 解决方案 > C++CLI 优化了吗?

问题描述

如果我用 C++CLI/托管 C++ 编写程序,编译器会执行任何优化吗?

我知道对于 C#,有一些优化是在编译时完成的,大多数优化是由 JIT 完成的。C++CLI 也一样吗?

一个类似的问题:我可以为 C++CLI 做相当于 -O2 标志的操作吗?我已经知道“-c Release”标志,但我不清楚它做了什么样的优化。

谢谢!

标签: optimizationc++-cliclrjit

解决方案


C++/CLI 代码总是在发布版本中进行优化,是的。谁是关键,你可以随意混合。太多本机 C++ 代码编译为 MSIL 时,这往往会出错。很难注意到,代码生成器可以处理任何兼容的 C++03 代码,并且很少对任何 C++1x 咒语尖叫。

一个很好的提醒,抖动与 C++ 编译器的后端没有太大区别。MSIL 可以很好地与 LLVM 所需的 IR 进行比较。MSVC++ 编译器用于本机代码的 IR 没有记录且不可见。

这使得将您包装在其自己的静态库或 DLL 中的本机 C++ 隔离是一种很好的做法。但是可以在功能级别进行混合,您可以使用#pragma un/managed 来回切换。

因此,就像您猜想的那样,#pragma 非托管代码得到了优化器的全部喜爱,而#pragma managed 代码在运行时通过抖动得到了优化。您会发现这篇文章中记录的抖动优化。


推荐阅读