微软的C++编译器(cl.exe
,包含在Visual Studio中)提供了several optimization switches。它们之间的差异似乎不言而喻,但我不清楚/O2
(它优化代码以获得最大速度)和/Ox
(它选择“完全优化”)之间的区别。
我已经尝试读取/Ox
选项的documentation,似乎确认此开关也支持最大速度的优化,而不是大小:
/Ox
编译器选项
生成的代码更注重执行速度而不是较小的大小。
但在“备注”部分,下面这句话引起了我的注意:
通常,请指定/O2
(最大速度)而不是/Ox
.
所以我的问题是,相对于/O2
/Ox
**?**,为什么人们通常更喜欢/O2
而不是呢?后者是否启用了特定的优化,从而导致不可预见的错误或其他意外的行为?这是不是简单地说,获得的优化数量不值得额外的编译时间?或者这只是一个完全没有意义的“建议”,因为/O2
是VS中的默认选项?
发布于 2015-04-02 21:24:12
Asha's answer引用了一篇关于Visual Studio2005的博客文章,但已经相当过时了。
此处提供了文档的最新版本:
/Ox
:https://msdn.microsoft.com/en-us/library/59a3b321.aspx/O2
:https://msdn.microsoft.com/en-us/library/8f8h5cxt.aspx根据这些信息:
/Ox
/Og /Oi /Ot /Oy /Ob2
/O2
/Gs /GF /Gy
相同,但进一步增加了→→
- `/GF` [eliminates duplicate strings](https://msdn.microsoft.com/en-us/library/s0s0asdt.aspx)
- `/Gy` does [function level linking](https://msdn.microsoft.com/en-us/library/xsa71f43.aspx)
您可能还对/GS-
感兴趣,它关闭了堆栈周围的安全检查,这可能会对性能造成重大影响(请参阅MS docs for /GS)。
您应该一如既往地对您的特定应用程序进行基准测试。
https://stackoverflow.com/questions/5063334
复制相似问题