GCC 优化选项

Posted

技术标签:

【中文标题】GCC 优化选项【英文标题】:GCC Optimization Option 【发布时间】:2013-08-06 03:09:07 【问题描述】:

最近用GCC编译一个程序,但是当我使用-O1优化选项时,出错了;使用-O0时没有问题。所以我用官方文档说的那些选项替换了-O1,例如-fauto-inc-dec-fcompare-elim-fcprop-registers等。 但是,它运行良好,没有任何错误,但性能不是很好。

我想知道-O1是否相当于那些小编译选项?

【问题讨论】:

听起来你的程序实际上有一个错误,可能是由未定义的行为引起的,它意外地与 -O0 一起工作。你应该修复这个错误。 谢谢您,先生。这是很有可能的。但是,我对 -O1 和 -O1 打开的那些优化标志的区别感兴趣。为什么它们有不同的效果? 【参考方案1】:

完全开启优化(-O1 vs -O0)会以-f 标志无法控制的方式更改代码生成。注意gcc documentation中的这句话:

并非所有优化都直接由标志控制。此部分仅列出具有标志的优化。

一些细节取决于非常具体的 gcc 版本号(例如 gcc 4.2 与 gcc 4.5、4.9 等)。

【讨论】:

【参考方案2】:

The -O1 will turn on the following optimization flags:

      -fauto-inc-dec 
      -fcompare-elim 
      -fcprop-registers 
      -fdce 
      -fdefer-pop 
      -fdelayed-branch 
      -fdse 
      -fguess-branch-probability 
      -fif-conversion2 
      -fif-conversion 
      -fipa-pure-const 
      -fipa-profile 
      -fipa-reference 
      -fmerge-constants
      -fsplit-wide-types 
      -ftree-bit-ccp 
      -ftree-builtin-call-dce 
      -ftree-ccp 
      -ftree-ch 
      -ftree-copyrename 
      -ftree-dce 
      -ftree-dominator-opts 
      -ftree-dse 
      -ftree-forwprop 
      -ftree-fre 
      -ftree-phiprop 
      -ftree-slsr 
      -ftree-sra 
      -ftree-pta 
      -ftree-ter 
      -funit-at-a-time

【讨论】:

我已经用它们来代替-O1,但是效果不一样。添加顺序也很重要吗? 是的,传球顺序通常很重要。 谢谢,我想知道在哪里可以得到序列? GCC 手册按字母顺序对其进行了排序。 @user2655195 我不知道打印通行证顺序的标志,但我想可以从通行证管理器代码中挖掘出来。看看gcc.gnu.org/onlinedocs/gccint/Pass-manager.html 好的,谢谢您的建议。

以上是关于GCC 优化选项的主要内容,如果未能解决你的问题,请参考以下文章

如何查看 gcc 优化选项?

(Linux)gcc进行优化编译的参数是啥?

GCC笔记(警告.优化以及调试选项)

如何在 GCC 中通过优化构建发布模式?

《编译 - 编译杂记》GCC优化等级说明

gcc优化选项解析