/ Ox和/ O2编译器选项有什么区别?

时间:2011-02-21 07:25:55

标签: c++ visual-studio visual-c++ compiler-optimization compiler-options

Microsoft的C ++编译器(Visual Studio中包含的cl.exe)提供several optimization switches。它们中的大多数之间的区别似乎是不言自明的,但我不清楚/O2(优化代码以获得最大速度)和/Ox(选择“完全优化”)之间的区别。

我已尝试为/Ox选项阅读documentation,似乎确认此切换还可以优化最高速度,而不是尺寸:

  

/Ox 编译器选项会生成有利于执行速度超过较小尺寸的代码。

但特别是,“备注”部分下面的声明引起了我的注意:

  

一般情况下,请指定 /O2 (最大化速度),而不是 /Ox

所以我的问题是,为什么人们普遍赞成/O2超过/Ox后一种选择是否会启用已知的特定优化会导致无法预料的错误或其他意外行为?是否只是获得的优化量不值得额外的编译时间?或者这只是一个完全没有意义的“建议”,因为/O2是VS中的默认选项?

2 个答案:

答案 0 :(得分:47)

我发现它here

  

Ox和O2几乎相同。他们   只有O2也有所不同   抛出GFGy。几乎没有   有理由避免抛出这两个   开关。

答案 1 :(得分:42)

Asha's answer引用了一篇关于Visual Studio 2005的博文,并且过时了。

此处提供了最新版本的文档:

根据那些:

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

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