Microsoft的C++编译器(Visual Studio附带的cl.exe
)提供了several optimization switches。它们中的大多数之间的区别似乎是不言而喻的,但是我不清楚/O2
(优化代码以实现最大速度)和/Ox
(选择“完全优化”)之间有什么区别。
我尝试读取/Ox
选项的documentation,似乎可以确认此开关还启用了最大速度而不是大小的优化:
但特别是,“备注”部分下的以下声明引起了我的注意:
所以我的问题是,为什么通常应该选择/O2
而不是/Ox
? 后一个选项是否启用已知的特定优化,从而导致无法预料的错误或其他意外行为?仅仅是获得的优化数量不值得额外的编译时间吗?还是由于/O2
是VS中的默认选项而导致的这完全是毫无意义的“建议”?
最佳答案
Asha's answer引用了有关Visual Studio 2005的博客文章,而且已经过时了。
该文档的最新版本可在此处获得:
/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 /Gy
会function level linking 您可能还对
/GS-
感兴趣,它会关闭堆栈周围的安全检查,这可能会严重打击性能(请参阅MS docs for /GS)。您应该像以往一样对特定的应用程序进行基准测试。