optimization - C++CLI 优化了吗?
问题描述
如果我用 C++CLI/托管 C++ 编写程序,编译器会执行任何优化吗?
我知道对于 C#,有一些优化是在编译时完成的,大多数优化是由 JIT 完成的。C++CLI 也一样吗?
一个类似的问题:我可以为 C++CLI 做相当于 -O2 标志的操作吗?我已经知道“-c Release”标志,但我不清楚它做了什么样的优化。
谢谢!
解决方案
C++/CLI 代码总是在发布版本中进行优化,是的。谁是关键,你可以随意混合。太多本机 C++ 代码编译为 MSIL 时,这往往会出错。很难注意到,代码生成器可以处理任何兼容的 C++03 代码,并且很少对任何 C++1x 咒语尖叫。
一个很好的提醒,抖动与 C++ 编译器的后端没有太大区别。MSIL 可以很好地与 LLVM 所需的 IR 进行比较。MSVC++ 编译器用于本机代码的 IR 没有记录且不可见。
这使得将您包装在其自己的静态库或 DLL 中的本机 C++ 隔离是一种很好的做法。但是可以在功能级别进行混合,您可以使用#pragma un/managed 来回切换。
因此,就像您猜想的那样,#pragma 非托管代码得到了优化器的全部喜爱,而#pragma managed 代码在运行时通过抖动得到了优化。您会发现这篇文章中记录的抖动优化。
推荐阅读
- javascript - 使用没有数据头对象的ajax解析嵌套json的数据表
- php - 数据库包含点(。)值时的跨数据库外键问题
- django - Django:过滤在另一个模型中没有相关 OneToOne 条目的模型条目
- node.js - 在nodejs中取消定义process.env.HOST
- javascript - Nightmare.js 多个步骤测试站点不起作用
- javascript - 如何使用 react-livechat 模块更改浏览器中的 Livechat 气泡位置?
- oauth-2.0 - 如何在 google-singin 中使范围可选?
- android - 在 BluetoothLeGatt - Android 应用程序中创建工具栏的位置
- javascript - 如何测试我的函数是否在开玩笑中返回另一个类的实例
- c# - C# - 使用 PID 杀死进程/任务的方法