关于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优化的主要内容,如果未能解决你的问题,请参考以下文章

GCC 优化级别有多少?

禁用 GCC 中的所有优化选项

如何在 gcc 中启用单个优化标志?

在计算加速时使用编译器优化

[Inside HotSpot] C1编译器优化:条件表达式消除

g++编译选项