【-O1-O2-O3-Ofast...】C/C++编译器代码优化原理方案

因代码运行时的优化需要,特在此记录 【-O1-O2-O3-Ofast…】C/C++编译器代码优化原理方案

  • 如果不指定优化标识的话,gcc 就会产生可调试代码,每条指令之间将是独立的:可以在指令之间设置断点,使用 gdb 中的 p 命令查看变量的值、改变变量的值等。并且把获取最快的编译速度作为它的目标。

  • 当优化标识被启用之后,gcc 编译器将会试图改变程序的结构(当然会在保证变换之后的程序与源程序语义等价的前提之下),以满足某些目标,如:代码大小最小运行速度更快(只不过通常来说,这两个目标是矛盾的,二者不可兼得)。

在不同的 gcc 配置和目标平台下,同一个标识所采用的优化种类也是不一样的。

可以使用 -Q --help =optimizers 来获取每个优化标识所启用的优化选项。

以下的每个优化标识都可以在 原网址 中找到对应的详细解释。

  1. -O,-O1

在不影响编译速度的前提下,尽量采用一些优化算法,降低可执行代码的大小

  1. -O2

牺牲部分编译速度,除了执行 -O1 所执行的所有优化之外,还会采用几乎所有的目标配置支持的优化算法,用以 提高目标代码的运行速度

  1. -O3

除了执行 -O2 所有的优化选项之外,一般都是采取很多向量化算法,提高代码的并行执行程度,利用现代 CPU 中的流水线、Cache等。这个选项会提高执行代码的大小,而可以 提高目标代码的运行速度

由于 -O3 是以提高执行速度为目的来扩展代码大小,如增加内联等,但过度膨胀反而可能降低执行速度,故而在两者之间取得某种平衡。

其开启的优化选项如下:

-finline-functions
-funswitch-loops
-fpredictive-commoning
-fgcse-after-reload
-ftree-loop-vectorize
-ftree-loop-distribute-patterns
-fsplit-paths
-ftree-slp-vectorize
-fvect-cost-model
-ftree-partial-pre
-fpeel-loops
-fipa-cp-clone options
  1. -Os

该优化标识和 -O3 的目的恰好相悖。

-Os 会在 -O2 的基础上尽量降低目标代码的大小,压缩代码空间,对嵌入式设备等存储容量小的设备较为重要。

为了降低目标代码大小,会禁用下列优化选项,一般就是压缩内存中的对齐空白1(alignment padding)。

-falign-functions
-falign-jumps
-falign-loops
-falign-labels
-freorder-blocks
-freorder-blocks-algorithm=stc
-freorder-blocks-and-partition
-fprefetch-loop-arrays
  1. -Ofast

该优化标识将不会严格遵循语言标准,除了启用所有的 -O3 优化选项之外,也会针对某些语言启用部分优化。如:-ffast-math 等。

同时 -Ofast 也会牺牲标准兼容性,以获得更快的运行速度。

  1. -Og

该优化标识会选择部分与 -g 选项不冲突的优化选项,以提供合理的优化水平,同时产生较优秀的可调试信息。


关于这些优化选项的应用实例之一,请见:

SPN实现——限时1000ms的代换-置换网络加解密的时间优化思路

启用的优化标识为:

 #pragma GCC optimize(3,"Ofast","inline")

  1. https://www.zhihu.com/question/27090458 ↩︎

【-O1-O2-O3-Ofast...】C/C++编译器代码优化原理方案相关推荐

  1. 【gcc】gcc优化等级 -O1 -O2 -O3 -Os -Ofast -Og

    目录 优化等级 -O1 -O2 -O3 -Os -Ofast -Og cmake 生成 debug和 release 版|Cmake设置优化等级 优化等级 -O1 -O2 -O3 -Os -Ofast ...

  2. c++ -O1,-O2,-O3资料整理

    原文:http://blog.csdn.net/xinianbuxiu/article/details/51844994 1.从.c文件到可执行文件,其间经历了几步? 高级语言是偏向人,按照人的思维方 ...

  3. gcc 优化选项 -O1 -O2 -O3 -Os 优先级,-fomit-frame-pointer(不积跬步无以至千里)

    -fomit-frame-pointer 在优化时候被启用,带来了效率的提升.看到一篇比较详细记录编译选项的文章,转发一下,同时给自己作一下备忘. 少优化->多优化: O0 -->> ...

  4. #gcc笔记01#gcc编译选项 -O0 -O1 -O2 -O3

    -O0 -O1 -O2 -O3 编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最(此处为大写字母O) 优化选项(来源:http://blog.csdn.net/Sodi ...

  5. gcc 优化选项 -O1 -O2 -O3 -Os 优先级

    Gcc 编译优化简介 gcc 提供了为了满足用户不同程度的的优化需要,提供了近百种优化选项,用来对{编译时间,目标文件长度,执行效率}这个三维模型进行不同的取舍和平衡.优化的方法不一而足,总体上将有以 ...

  6. C++手动开启O2优化(以及-O -O1 -O2 -O3优化的知识点)(竞赛可用)

    O1优化会消耗少多的编译时间,它主要对代码的分支,常量以及表达式等进行优化. O2会尝试更多的寄存器级的优化以及指令级的优化,它会在编译期间占用更多的内存和编译时间. O3在O2的基础上进行更多的优化 ...

  7. gcc 中-O -O1 -O2 -O3 -Os -Ofast -Og优化的原理

    一般来说,如果不指定优化标识的话,gcc就会产生可调试代码,每条指令之间将是独立的:可以在指令之间设置断点,使用gdb中的 p命令查看变量的值,改变变量的值等.并且把获取最快的编译速度作为它的目标. ...

  8. GNU编译优化级别-O -O1 -O2 -O3

    最近做一个算法的GPU加速,发现实际上使用gcc的-O3(最高级编译优化)选项,可以获得很高的加速比,我的程序里达到了3倍的样子,有时效果甚至比GPU加速好.因此小小学习了下GNU的编译优化. 附言一 ...

  9. makefile工作笔记0002---gcc -O0 -O1 -O2 -O3 四级优化选项及每级分别做什么优化

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 相关博客http://blog.chinaunix.net/uid-24954950-id-295 ...

  10. gcc -O0 -O1 -O2 -O3 四级优化选项及每级分别做什么优化【转】

    转自:http://blog.csdn.net/qinrenzhi/article/details/78334677 相关博客http://blog.chinaunix.net/uid-2495495 ...

最新文章

  1. 开始iOS 7中自动布局教程(一)
  2. spring二:装配bean(自动装配)
  3. 汇编 CALL和RET指令
  4. (转)java中对集合对象list的几种循环访问总结
  5. 【视频教程】JeeWx 微信开发入门视频
  6. 神奇的python(五)之python强制退出报错(异常)解决方法
  7. 再来过-docker
  8. zabbix3.2自动发现
  9. Response.Redirect导致session丢失的解决办法
  10. Spring对 JDBC 的支持,JdbcTemplate类的使用
  11. 新浪微博说说html,说说新浪微博
  12. transformer中的多头注意力机制
  13. hdu1728 逃离迷宫
  14. linux 终端显示的文件颜色的含义
  15. 1128UI自动化测试经验分享-显式等待(二)expected_conditions模块、visibility_of_element_located(locator)
  16. mycat 常用分片规则使用详解
  17. 推荐系统精排模型中的ID特征
  18. linux毁灭指令,那些致命的Linux命令
  19. vue项目接入unity3D模块并进行数据通信
  20. 用AI脑补慢动作,30帧秒变120帧,轻松看清“松果糖豆五连鞭”动作细节

热门文章

  1. C#--Obsolete
  2. 中华小子剧情介绍,中华小子在线观看
  3. 高等流体力学 第二章 流体力学基础
  4. 《计算机网络》day01-网络的诞生和发展
  5. python findwindow函数_PYTHON:Win32函数大全
  6. 《Data Algorithm》读书笔记七 — 购物篮分析
  7. 服务器raid5阵列硬盘故障的解决办法
  8. [题解] CF 1528B Kavi on Pairing Duty
  9. MacOS打开多个微信的方法(代码+脚本)
  10. 时空跳跃者的追捕行动解题报告