GCC中-O相关优化选项的解析

使用GCC编译优化代码时,优化等级分为0级,1级,2级,3级,使用-O相关选项来设置

-O0:0级,不做任何优化。没有加-O相关选项的话,这是默认的选项。
-O1(-O):1级,最基础的优化选项。优化代码大小和执行时间,包括对代码的分支,常量以及表达式等进行优化。
-O2:2级,推荐的优化选项。在-O1基础上增加了更多的优化,包括过程间优化,寄存器级和指令级的优化,内联优化等。GNU发布软件时,默认使用的优化就是-O2优化。
-Os:2级,优化代码大小。打开了-O2中的大部分优化,但是去除了-O2中会增加代码大小的优化,例如指令预取,函数对齐等(优化后会增加一些代码)
-O3:3级,最高的安全优化选项。在-O2基础上增加了更多的优化,包括一些循环优化,向量优化等。
-Ofast: 3级,在-O3基础上增加了一些不安全的优化。例如, -Ofast开启的一个选项 “-ffast-math”,包含了很多份IEEE/ISO标准的优化,虽然能加速但会降低精度,也可能会产生一些错误的结果(主要影响高精度的浮点运算)

-Og: 1级,用于调试的基础优化选项。在-O0基础上增加了一些不影响调试的优化,同时也会收集一些调试信息。不过需要调试时,还是要额外增加-g选项。

需要注意,-O0(也就是GCC默认的优化)会disable大多数的优化选项,所以使用某一个优化选项时,需要加上-O1及以上的选项。如果同时使用了多个-O相关选项,不管是哪个级别,只有命令行的最后一个-O选项有效。此外在GCC中,-O4, -O5等类似选项会被转换成-O3,因为GCC最高只有-O3.

gcc -O3 -Q --help=optimizers可查看

最后,如果想知道当前的编译命令到底enable了哪些具体的编译选项(包括GCC默认的),可以增加-fverbose-asm -S选项。这会生成一个.s的汇编文件,这个汇编文件的开头详细列出了当前GCC使用的所有编译选项。并且,汇编代码对应的源代码(.c/cpp)也列出来了。结合源代码看对应的汇编代码,也比较容易理解。

转载:https://www.jianshu.com/p/dafd8aad95e6

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值