3 回答
TA贡献1845条经验 获得超8个赞
Stricto sensu,GCC编译器的中端由优化遍历的序列(实际上是嵌套树,在编译过程中会动态更改)组成,因此,如果GCC没有进行优化,则将无法发出任何代码。
想想另一种方式:输入语言GCC是相当丰富的(即使是纯C,在那里你有while,for,...),但中间GIMPLE语言是更差(特别是GIMPLE / SSA),所以你需要到应用一些转换以将源AST转换为Gimple。这些转换是优化过程,几乎可以定义为。
另请参阅该答案和该答案的图片(SVG图片),并阅读此处提到的参考资料。
您应该理解-O0为禁用生成某些可执行文件不需要的任何其他优化(例如,-O1etc等提供的优化)。
TA贡献1809条经验 获得超8个赞
为了回答我的问题,我做出了一些结论和假设:
因此,我想说用O0进行编译并不意味着不会应用任何优化。如上面@abligh所述,可以减少编译时间并改善调试效果的选项将打开。
换句话说,O0在编译级别上正在优化。生成的二进制文件未经过优化,以简化调试过程。
我举一个例子:该选项在O0级别启用
渐进式循环优化
在GCC文档中:
此选项告诉循环优化器使用语言约束来得出循环迭代次数的界限。这假定循环代码不会通过例如引起有符号整数溢出或超出范围的数组访问来调用未定义的行为。循环迭代次数的界限用于指导循环展开和剥离以及循环退出测试优化。默认情况下启用此选项。
因此,对于GCC 4.8.x,默认情况下将启用近50个选项。
添加回答
举报
