Microsoft的C++编译器(cl.exe
,包含在Visual Studio中)提供了多种优化开关。大多数开关之间的区别似乎是不言自明的,但我不清楚/O2
(针对最大速度优化代码)和/Ox
(选择“完整优化”)之间有何区别。
我尝试阅读有关/Ox
选项的文档,似乎证实了该开关还启用了针对最大速度的优化而非大小:
/Ox
编译器选项生成更偏重于执行速度而非大小的代码。
但特别地,在“备注”部分下面的以下声明引起了我的注意:
一般情况下,请使用
/O2
(最大化速度)而不是/Ox
。
所以我的问题是,为什么一般情况下应该青睐/O2
而不是/Ox
?后者选项是否启用了一种已知会导致意外错误或其他不可预见行为的特定优化?只是因为获得的优化量不值得额外的编译时间吗?还是这只是一个毫无意义的“建议”,因为在VS中/O2
是默认选项?
/Ox
比/O2
更高级一些。看起来这两个都至少提供了理论上的性能提升。 - Cody Gray