首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GCC编著:-O3有害吗?

GCC编著:-O3有害吗?
EN

Stack Overflow用户
提问于 2014-08-08 07:21:23
回答 1查看 1.9K关注 0票数 7

我听说gcc不应该用-O3选项编译。这是真的吗?如果是这样,那么避免-O3的原因是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-08 09:28:10

答案是:这取决于您的代码。

基本的经验法则如下:

  • 在-O1,编译器进行的优化不会花太长时间计算。
  • 在-O2,编译器进行“昂贵”的优化,这可能会减慢编译过程。它们也可能使输出程序稍微大一点,但可能没有那么大。
  • -Os与-O2大致相同,但优化更多地是针对大小而不是速度。在大多数情况下,这两个特性并不冲突(更多的最优代码可以减少步骤,因此更小),但是有一些技巧可以重复代码,以避免分支损失。
  • 在-O3,编译器确实加快了需要空间的优化。它将更加积极地内联函数,并在可能的情况下尝试使用矢量化。

您可以在GCC文献中阅读更多细节。如果您真的想对代码进行超级优化,那么您可以尝试启用更多的选项,即使是在-O3中也没有使用;例如,-floop-*选项。

特别是速度空间优化的问题是,它们会对内存缓存的有效性产生负面影响。代码可能对CPU更好,但如果对内存没有更好的效果,那么您就会失败。由于这个原因,如果您的程序没有一个热点,它花费了所有的时间,那么您可能会发现它的速度总体上是慢的。

现实世界的优化是一门不精确的科学,原因有三:

  1. 用户的硬件变化很大。
  2. 对一个代码库有利的东西可能对另一个代码库没有好处。
  3. 我们希望编译器能够快速运行,所以它必须做出最好的猜测,而不是尝试所有的选项和选择最好的。

基本上,答案总是:如果性能很重要,尝试所有优化级别,度量您的代码的性能,并为您的选择最好的。再做一次,每一件大的改变。

如果性能不重要,-O2是您的选择。

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

https://stackoverflow.com/questions/25198018

复制
相关文章

相似问题

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