Cod*_*ray 64 c++ compiler-optimization compiler-options visual-studio visual-c++
Microsoft的C++编译器(cl.exe包含在Visual Studio中)提供了几个优化开关.大多数它们之间的差异似乎是不言自明的,但我不清楚它之间的区别/O2(它优化代码以获得最大速度)和/Ox(选择"完全优化").
我试着阅读文档的/Ox选项,它似乎证实,该交换机还支持优化的最高速度,而不是大小:
所述
/Ox编译器选项产生在较小尺寸有利于代码的执行速度.
但特别是,"备注"部分下面的声明引起了我的注意:
通常,指定
/O2(最大化速度)而不是/Ox.
所以我的问题是,为什么要一个普遍青睐/O2了/Ox?后一个选项是否允许已知的特定优化导致无法预料的错误或其他意外行为?是否只是获得的优化量不值得额外的编译时间?或者这只是一个完全没有意义的"推荐",因为它/O2是VS中的默认选项?
Ash*_*sha 48
Ala*_*Maw 43
Asha的回答引用了一篇关于Visual Studio 2005的博客文章,并且过时了.
最新版本的文档可在此处获得:
/Ox:https://msdn.microsoft.com/en-us/library/59a3b321.aspx/O2:https://msdn.microsoft.com/en-us/library/8f8h5cxt.aspx根据那些:
看来,/Ox设置/O2没有值,这意味着的默认值/Ox.从文档中可以看出:
/Og /Oi /Ot /Oy /Ob2为每个需要存储局部变量的函数调用激活堆栈探测器.这可能会对性能产生负面影响.
所以/O2可能实际上比/Gs /GF /Gy你慢,仅仅是因为这个.令人惊讶的IMO看起来像一个错误(在文档或实现中).
您可能还有兴趣/GF关闭堆栈周围的安全检查,这可能是一个重大的性能损失(请参阅/ GS的MS文档).
您应该像往常一样对特定应用程序进