您的位置:首页 > 其它

C核心技术手册(四十四)

2011-05-03 23:45 246 查看

18.6 优化

GCC有很多技术可以使用执行文件生成更快更小,这些技巧趋向于减少程序与机器码间的逐字通信速度,它可能使用调试变得很困难,通常用于程序已经被测试和调试过之后。
有两种优化选项,你可以通过-f开始的选项来单独地使用它们,例如-fmerge-constants,它将使用编译器将相同的常量放置在一个通用的地址,甚至交叉于不同的源文件,也可以使用-o选项(-o0, -o1, -o2和-o3)来设置优化级别,它可以一次性启用许多优化技巧。

18.6.1 选项-O的级别

每一个-o选项代表许多独立的优化技巧,-o优化级别是累加的,-o2包含了-o1中的所有优化项,-o3包含-o2, 想了解不同级别的细节描述和一些-f选项的意义,可以参见GCC参考手册,下面的列表提供了每个级别简单的描述:
-O0
关闭所有优化选项。
-O, -O1
试图使用可执行文件更小更快,但却增加了编译的时长,此方法具有合并同一常量,基本循环优化,函数调用后对栈操作进行分组。不带数字的-o选项与-o1的作用是一样的。
-O2
使用几乎所有的优化方法,但不在程序大小和执行速度间进行权衡。此选项会增加编译时长,除包含-o1的优化项外,编译器执行子表达式清楚任务,即CSE, 此步骤检测程序等价的数据表达式,且重新它们一次,将结果保存在一个没命名的变量中用来重用,此外,指令将被重新安排以减少等待数据从内存向CPU寄存器中移动的时间,还有,数据流分析也在此阶段执行,它允许编译器道理生附加的告警信息来提示没有初始化的变量。
-O3
生成内联函数,且灵活地向寄存器中安排变量,包含了-O2的优化项。
-Os
关于大小的选项。此选项与-o2类似,但不会增加代码大小,此外,块重排,函数对齐,跳转被禁止,如果你想得到小的执行文件,你应该使用GCC的-s选项,它将使连接器在所有必要的函数和对象连接之后将符号表从执行文件中剥离,这将使用最终程序很小,经常用于构建产品最终版本。
下面的例子描述了如何使用-o选项:
$ gcc -Wall -O3 -o circle circle.c circulararea.c –lm
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: