Gcc 比较使用-O2和使用它打开的所有优化标志的效果
它说,从 -O2打开-O指定的所有优化标志。它还打开以下优化标志: -fthread跳转 -falign功能-falign跳跃 -falign循环-falign标签 -fcaller保存 -跳高 -fcse跟随跳跃等 似乎使用-O2与使用gcc 5.4.0中-O2打开的所有83个优化标志对测试程序性能的影响相同 但是,我比较了通过以下方式获得的可执行文件test1和test2的运行时间: gcc-5.4-氧气测试。c-氧气测试1 及 gcc-5.4-福托股份有限公司12月 -农场计数注册 -fcombine堆栈调整 -FCompareElim-fthread jumps-falling函数…(所有83个标志)test.c-o test2 我在20个随机生成的c程序上进行了测试,每个测试用例运行100000次,以确保运行时间的测量足够准确。但是结果是使用-O2比使用所有83个标志平均快60% 我真的很困惑为什么使用-O2的效果并不等同于使用它打开的所有优化标志Gcc 比较使用-O2和使用它打开的所有优化标志的效果,gcc,optimization,Gcc,Optimization,它说,从 -O2打开-O指定的所有优化标志。它还打开以下优化标志: -fthread跳转 -falign功能-falign跳跃 -falign循环-falign标签 -fcaller保存 -跳高 -fcse跟随跳跃等 似乎使用-O2与使用gcc 5.4.0中-O2打开的所有83个优化标志对测试程序性能的影响相同 但是,我比较了通过以下方式获得的可执行文件test1和test2的运行时间: gcc-5.4-氧气测试。c-氧气测试1 及 gcc-5.4-福托股份有限公司12月 -农场计数注册 -fc
我一定是误解了什么,但我还找不到任何解释。我非常感谢你的帮助。非常感谢。这是一个常见的问题。为了启用(或禁用)特定优化,您必须首先启用优化器,即使用
-O..
标志之一,除了-O0
(或仅-O
,相当于-O1
).优化级别影响编译器其他部分的决策,除了决定运行哪些过程。这些可能是在强制过程中进行的,如代码内部表示之间的转换、寄存器分配等,因此优化级别并不完全等同于启用每个编译器过程的一组开关。
请查看有关此主题的一些讨论。plus“其次,-Ox标志支持许多不受任何单个-f*选项控制的优化。”来自Marc Glisse提供的链接