有多少GCC优化级别?

nsit 发布于 2019-11-10 c 最后更新 2019-11-10 12:10 227 浏览

有多少GCC优化级别? 我尝试了gcc -O1,gcc -O2,gcc -O3和gcc -O4 如果我使用一个非常大的数字,它将不起作用。 不过,我试过了

gcc -O100
并编译。 有多少优化级别?
已邀请:

fomnis

赞同来自:

四(0-3):参见GCC 4.4.2 manual。任何更高的东西只是-O3,但在某些时候你会溢出可变大小限制。

oest

赞同来自:

要迂腐,你可以给gcc提供8种不同的有效-O选项,尽管有一些意思相同。 这个答案的原始版本说明有7个选项。此后,海湾合作委员会增加了-Og,使总数达到8 来自man page:

  • -O(与-O1相同)
  • -O0(不进行优化,如果未指定优化级别,则为默认值)
  • -O1(最低限度优化)
  • -O2(优化更多)
  • -O3(优化更多)
  • -Ofast(非常积极地优化以达到违反标准合规性的程度)
  • -Og(优化调试体验。-Og启用不会干扰调试的优化。它应该是        标准编辑 - 编译 - 调试周期的优化级别选择,提供合理的优化级别        同时保持快速编译和良好的调试体验。)
  • -Os(优化大小.-Os启用所有通常不会增加代码大小的-O2优化。它还会执行进一步的优化 旨在减少代码大小。 -Os禁用以下优化标志:-falign-functions -falign-jumps -falign-loops -falign-labels -freorder-blocks -freorder-blocks-and-partition -fprefetch-loop-arrays -ftree-vect-loop-version)
可能还有特定于平台的优化,如@pauldoo所说,OS X有-Oz

ererum

赞同来自:

内容太长未翻译

xporro

赞同来自:

七个不同的级别:

  • -O0(默认值):无优化。
  • -O-O1(同样的事情):优化,但不要花太多时间。
  • -O2:更积极地优化
  • -O3:最积极地进行优化
  • -Ofast:相当于-O3 -ffast-math-ffast-math触发非标准兼容的浮点优化。这允许编译器假装浮点数是无限精确的,并且它们上的代数遵循实数代数的标准规则。它还告诉编译器告诉硬件将非正规数刷新为零,并将非正规数视为零,至少在某些处理器上,包括x86和x86-64。非正规在许多FPU上触发慢速路径,因此将它们视为零(不会触发慢速路径)可能是一个很大的性能胜利。
  • -Os:优化代码大小。在某些情况下,由于更好的I-cache行为,这实际上可以提高速度。
  • -Og:优化,但不干扰调试。这为调试版本提供了非令人尴尬的性能,旨在将-O0替换为调试版本。
还有其他任何选项未启用,必须单独启用。也可以使用优化选项,但禁用此优化启用的特定标志。 有关更多信息,请参阅GCC网站。