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
  • /Gyfunction level linking

  • 您可能还对/GS-感兴趣,它会关闭堆栈周围的安全检查,这可能会严重打击性能(请参阅MS docs for /GS)。

    您应该像以往一样对特定的应用程序进行基准测试。

    09-27 08:20