编译优化的等级的说明

1.前言

编译优化通过对编译时间、目标文件大小、执行效率进行不同的取舍和平衡,来提供整体性能。优化的方法大致包括:1)精简操作指令;2)尽量做到CPU的流水操作;3)对程序的猜测,调整代码的执行顺序;4)充分使用寄存器;5)对调用进行展开操作。

对程序进行合理的优化,可以很好地改善代码大小,提高程序的执行性能,但是优化后,也可能出现一些莫名其妙的问题。这里对编译优化做一个总结描述。

2.官方编译说明链接

https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html

3.优化等级

优化级别的参数有:-O0、-O1、-O2、-O3、-Og、-Os、-Ofast

编译优化等级

说明

描述

-O0

无优化

不做任何优化,减少编译时间并使调试可以产生预期的结果。

-O1

基本优化

编译器在不花费太多编译时间的同时,尝试生成更快更小的代码。

-O2

比O1更高优化

这是推荐的优化等级,除非你有特殊的需求。-O2会比-O1启用多一些标记。设置了-O2后,编译器会试图提高代码性能而不会增大体积和大量占用的编译时间。

-O3

危险优化等级

会延长代码的编译时间,将生成更大体积和更耗内存的二进制文件,增加编译失败的概率或不可预知的程序行为。

-Og

O1基础上,去掉影响调试的优化

如果最终是为了调试程序,可以使用这个参数。

-Os

代码大小优化

主要对代码大小优化,通常各种优化会打乱程序的结构,让调试工作变得无从着手,并且会打乱执行顺序,依赖内存操作顺序的程序需要做相关处理才能保证程序的正确性。如果想要更小的可执行程序,可选择这个参数

-Ofast

优化到破坏标准合规性的点

是在O3的基础上,添加了一些非常规优化,这些优化是通过打破一些国际标准(比如一些数学函数的实现标准)来实现的,所以一般不推荐使用该参数。

4.优缺点

优点:优化等级越高,所需时间越长,但程序运行起来一般会更高效。

缺点:延长编译时间,且优化等级过高后,可能会导致意想不到的错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小草xyz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值