74

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

我已经尝试阅读该选项的文档/Ox,并且似乎确认此开关还可以优化最大速度,而不是大小:

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

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

通常,指定/O2(Maximize Speed) 而不是/Ox

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

4

2 回答 2

54

我在这里找到它:

Ox 和 O2 几乎相同。它们的不同之处仅在于 O2 也抛出GFGy。几乎没有理由避免抛出这两个开关。

于 2011-02-21T07:33:37.910 回答
50

Asha 的回答引用了一篇关于 Visual Studio 2005 的博客文章,并且已经过时了。

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

根据那些:

您可能还对/GS-哪些会关闭堆栈周围的安全检查感兴趣,这可能会对性能造成重大影响(请参阅/GS 的 MS 文档)。

您应该一如既往地对您的特定应用程序进行基准测试。

于 2015-04-02T13:24:12.080 回答