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

问题描述 投票:63回答:2

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

我已经尝试过为documentation选项读取/Ox,它似乎确认此开关还可以优化最大速度,而不是大小:

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

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

通常,请指定/O2(最大化速度)而不是/Ox

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

c++ visual-studio visual-c++ compiler-optimization compiler-options
2个回答
42
投票

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

最新版本的文档可在此处获得:

根据那些:

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

您应该像往常一样对特定应用程序进


47
投票

我发现它here

Ox和O2几乎相同。他们的区别仅在于O2也投掷了GFGy。几乎没有理由避免抛出这两个开关。

© www.soinside.com 2019 - 2024. All rights reserved.