1. 首页
  2. 文档大全

linux下gcc编译优化方法.doc

上传者:小健 2022-06-11 17:10:17上传 DOC文件 93 KB
Gcc优化调研
Gcc编译优化简介
gcc提供了为了满足用户不同程度的的优化需要,提供了近百种优化选项, 用来对{编译时间,目标文件长度,执行效率}这个三维模型进行不同的取舍和平 衡。优化的方法不一而足,总体上将有以下几类:1)精简操作指令;2)尽量满 足cpu的流水操作;3)通过对程序行为地猜测,重新调整代码的执行顺序;4) 充分使用寄存器;5)对简单的调用进行展开等等。想全部了解这些编译选项, 并在其中挑选适合的选项进行优化,无疑像个噩梦般的过程。单从gnu的官方网 站上得到的手册来看,描述依然比较苍白,不足以完全了解选项的使用范围和原 理。(GCC has well over a hundred individual optimization flags and it would be insane to try and describe them all)
幸而gcc提供了从00-03以及Os这几种不同的优化级别供大家选择,在这 些选项中,包含了大部分有效的编译优化选项,并且可以在这个基础上,对某些 选项进行屏蔽或添加,从而大大降低了使用的难度,毕竟,在一定基础上进行取 舍,比万事从头开始要好得多。下面着重围绕这几个不同的级别进行简单介绍。
(由于gcc不同版本手册差异比较大,以下主要以gcc-3.4.6为参考)
-00:
不做任何优化,这是默认的编译选项。
-O 和-O1:
对程序做部分编译优化,对于大函数,优化编译占用稍微多的时间和相当大 的内存。使用本项优化,编译器会尝试减小生成代码的尺寸,以及缩短执行时间, 但并不执行需要占用大量编译时间的优化。
打开的优化选项:
-fdefer-pop:延迟栈的弹出时间。当完成一个函数调用,参数并不马上从 栈中弹出,而是在多个函数被调用后,一次性弹出。
-fmerge-constants:尝试横跨编译单元合并同样的常量(string constants and floating point constants)
-fthread-jumps:如果某个跳转分支的目的地存在另一个条件比较,而且该 条件比较包含在前一个比较语句之内,那么执行本项优化.根据条件是true 或者false,前面那条分支重定向到第二条分支的目的地或者紧跟在第二条 分支后面.
-floop-optimize:执行循环优化,将常量表达式从循环中移除,简化判断循 环的条件,并且optionally do strength-reduction,或者将循环打开等。 在大型复杂的循环中,这种优化比较显著。
-fif-conversion:尝试将条件跳转转换为等价的无分支型式。优化实现方 式包括条件移动,
min, max,设置标志,以及abs指令,以及一些算术技巧
-fif-conversion2基本意义相同,没有找到更多的解释。
-fdelayed-branch:这种技术试图根据指令周期时间重新安排指令。它还 试图把尽可能多的指令移动到条件分支前,以便最充分的利用处理器的治 理缓存。
>
-fguess-branch-probabi 1 ity: 当没有可用的 profiling feedback 或
—builtin_expect时,编译器采用随机模式猜测分支被执行的可能性,并移 动对应汇嫡代

linux下gcc编译优化方法


文档来源:https://www.taodocs.com/p-690365898.html

文档标签:

下载地址