关于GCC-O优化
Posted Harris-H
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于GCC-O优化相关的知识,希望对你有一定的参考价值。
关于GCC-O优化
-O,-O1:
这两个命令的效果是一样的,目的都是在不影响编译速度的前提下,尽量采用一些优化算法降低代码大小和可执行代码的运行速度。并开启如下的优化选项:
-O2
该优化选项会牺牲部分编译速度,除了执行-O1所执行的所有优化之外,还会采用几乎所有的目标配置支持的优化算法,用以提高目标代码的运行速度。
-O3
该选项除了执行-O2所有的优化选项之外,一般都是采取很多向量化算法,提高代码的并行执行程度,利用现代CPU中的流水线,Cache等。
-Os: optimizes code for size. It activates all -O2 options that do not increase the size of the generated code. It can be useful for machines that have extremely limited disk storage space and/or CPUs with small cache sizes.
-Og: In GCC 4.8, a new general optimization level, -Og, has been introduced. It addresses the need for fast compilation and a superior debugging experience while providing a reasonable level of runtime performance. Overall experience for development should be better than the default optimization level -O0. Note that -Og does not imply -g, it simply disables optimizations that may interfere with debugging.
-Ofast: New in GCC 4.7, consists of -O3 plus -ffast-math, -fno-protect-parens, and -fstack-arrays. This option breaks strict standards compliance, and is not recommended for use.
你开了-O2,stl里大量的函数都被inline了,故而比原来快好多,毋庸置疑,stl没有inline基本上是威力全无,切记。
虽然-O3的建议程度不比-O2,但个人推荐-O3作为release版本的选项,因为它开启了重要的-finline-functions,对于实在是要在乎code size的情况,配合使用noinline。这总比费劲心思profiling然后写inline函数来得简单。
算法竞赛中这样写(cpp下)
#pragma GCC optimize(2) //O2优化
#pragma GCC optimize(3,"Ofast","inline") //O3优化
都必须放在程序最开头,在所有头文件的最开头
参考文章
https://www.zhihu.com/question/27090458
以上是关于关于GCC-O优化的主要内容,如果未能解决你的问题,请参考以下文章