在linux上使用gcc编译器时,如果使用-g参数将调试信息添加到程序中,则会生成接近不添加-g参数时的两倍的可执行文件。
1.-O,-O1 :
这两个命令的效果都是相同的,目的是采用优化算法来尽可能降低代码大小和可执行代码的执行速度,而不影响编译速度。 打开以下优化选项:
-自动集成电路
- f分支计数reg
- f组合堆叠协调
-fcompare-elim
- fc简档注册
-fdce
-fdefer-pop
- f已延迟分支
-fdse
-前向传播
-fguess-branch-probability
-fif-conversion2
-光纤转换
-finline-functions-called-once
-fipa-pure-const
- fipa -配置文件
- fipa -参考
- f合并常数
- f移动- loop-invariants
-freorder-blocks
-fshrink-wrap
-fshrink-wrap-separate
- f拆分宽类型
-fssa-backprop
-fssa-phiopt
- f存储邮件
-ftree-bit-ccp
-ftree-ccp
-ftree-ch
-ftree-coalesce-vars
-自由复制单
-ftree-dce
-ftree-dominator-opts
-ftree-dse
-ftree-forwprop
-ftree-fre
-ftree-phiprop
-ftree-sink
-ftree-slsr
-ftree-sra
-ftree-pta
-ftree-ter
-funit-at-a-time
2. -O2
此优化选项牺牲了部分编译速度,除了使用-O1执行的优化外,还使用大多数目标配置支持的优化算法来提高目标代码的执行速度。
-fthread-jumps
-falign-functions -falign-jumps
- f对齐- loops-f对齐-标签
-fcaller-saves
-fcrossjumping
- fcse-follow-jumps-fcse-skip-blocks
- f delete -空指针检查
- FDE virtualize-FDE virtualize-speculative ly
-灵活优化
-fgcse -fgcse-lm
-fhoist-adjacent-loads
-精细线小型功能
-findirect-inlining
-fipa-cp
-fipa-cp-alignment
-fipa-bit-cp
-fipa-sra
-fipa-icf
- f隔离错误路径参考
-flra-remat
-foptimize-sibling-calls
-foptimize-strlen
-fpartial-inlining
-fpeephole2
-freorder-blocks-algorithm=stc
- fre order-blocks-and-partition-fre order-functions
-frerun-cse-after-loop
-fsched-interblock -fsched-spec
- fschedule-insns-fschedule-insns 2
- f严格对齐- f严格溢出
-ftree-builtin-call-dce
- Ftree-switch-conversion-ftree-tail-merge
-fcode-hoisting
-ftree-pre
-ftree-vrp
-fipa-ra
3. -O3
该选项除了执行-O2的所有优化选项外,还采用了很多矢量化算法,提高了代码的并行执行度,一般使用现代CPU中的流水线、Cache等。 此选项会增加执行代码的大小。 当然,降低目标代码的执行时间。
-精细线函数//使用一些启发式算法内联函数
-执行-funswitch-loops //循环unswitch转换
-fpredictive-commoning //
-fgcse-after-reload //执行全局公共子表达式删除
-ftree-loop-vectorize //
-自由环路分布式参数
- f剥离路径
-ftree-slp-vectorize
-fvect-cost-model
-自由粒子预
-fpeel-loops
- fipa-CP -克隆选项
4.-操作系统
该优化标志和-O3有不同的特点。 当然,两者的目标不同。 -O3的目标是在增加目标代码大小的同时提高运行速度,但此选项基于-O2尽量减小目标代码的大小。 这对存储容量较小的设备非常重要。 为了减小目标代码的大小,以下优化选项将被禁用。 通常是压缩内存的“对准空白”
- f对齐功能
-falign-jumps
-falign-loops
- f对齐标签
-freorder-blocks
-freorder-blocks-algorithm=stc
-freorder-blocks-and-partition
-fprefetch-loop-arrays