我尝试用gcc优化C代码。如果我使用-O1选项将有更好的运行时间,但如果我使用等效的
-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
就像我没有使用任何选项标志。 GCC版本是4.8.2。拜托,谁能解释一下为什么?我刚刚发现这些标志的顺序很重要,但我没有找到-O1中的顺序。
答案 0 :(得分:8)
根据文件,
只有在命令行上设置-O级别时,才会启用大多数优化。否则它们被禁用,即使指定了单独的优化标志。
https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html(强调我的)
当它继续列出您可以设置的特定标志时,它会注意到:
在极少数情况下,当需要对要执行的优化进行“微调”时,可以使用以下标志。
很明显,他们不希望您制作完全自定义的优化选项,而是选择最适合您的方案的一般级别(根据您当前是否正在调试,运送,等等,然后微调你的代码受益于打开或关闭的任何标志。