首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >/Ox和/O2编译器选项之间有什么区别?

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

Stack Overflow用户
提问于 2011-02-21 15:25:55
回答 2查看 25.7K关注 0票数 72

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

我已经尝试读取/Ox选项的documentation,似乎确认此开关也支持最大速度的优化,而不是大小:

/Ox编译器选项

生成的代码更注重执行速度而不是较小的大小。

但在“备注”部分,下面这句话引起了我的注意:

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

所以我的问题是,相对于/O2 /Ox**?**,为什么人们通常更喜欢/O2而不是呢?后者是否启用了特定的优化,从而导致不可预见的错误或其他意外的行为?这是不是简单地说,获得的优化数量不值得额外的编译时间?或者这只是一个完全没有意义的“建议”,因为/O2是VS中的默认选项?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-02 21:24:12

Asha's answer引用了一篇关于Visual Studio2005的博客文章,但已经相当过时了。

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

根据这些信息:

  • /Ox /Og /Oi /Ot /Oy /Ob2
  • /O2 /Gs /GF /Gy

相同,但进一步增加了→→

代码语言:javascript
运行
复制
- `/GF` [eliminates duplicate strings](https://msdn.microsoft.com/en-us/library/s0s0asdt.aspx)
- `/Gy` does [function level linking](https://msdn.microsoft.com/en-us/library/xsa71f43.aspx)

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

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

票数 49
EN

Stack Overflow用户

发布于 2011-02-21 15:33:38

我找到了here

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

票数 53
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5063334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档