gcc代码优化

来源:互联网 发布:淘宝衣服搭配在哪里 编辑:程序博客网 时间:2024/05/17 03:31

优化代码指的是编译器通过分析源代码,找出其中尚未达到最优的部分,然后对其重新进行组合,目的是改善程序的执行性能。

gcc提供的代码优化功能非常强大,它通过编译选项-On(其中n是代表优化级别的整数)来控制优化代码的生成。

对于不同版本的gcc来讲,n的取值范围及其对应的优化效果可能并不完全相同,比较典型的范围是从0变化到2或3。

编译时使用选项-O可以告诉gcc同时减小代码的长度和执行时间,其效果等价于-O1。在这一级别上能够进行的优化类型虽然取决于目标处理器,但一般都会包括线程跳转(Thread Jump)和延迟退栈(Deferred Stack Pops)两种优化。

选项-O2告诉gcc除了完成所有-O1级别的优化外,同时还要进行一些额外的调整工作,如处理器指令调度等。
选项-O3则除了完成所有-O2级别的优化外,还包括循环进展和其他一些与处理器特性相关的优化工作。

通常来说,数字越大优化的等级越高,同时也就意味着程序的运行速度越快。许多Linux程序员都喜欢使用-O2选项,因为它在优化长度、编译时间和代码大小之间取得了一个比较理想的平衡点。

下面通过一个例子(这个例子是专门针对gcc优化功能而设计)说明一下

 #include <stdio.h>
int main()
{
double counter;
double result;
double temp;
for(counter = 0; counter < 4000.0 * 4000.0 * 4000.0 / 20.0 + 2030;
   counter += (5 - 3 + 2 + 1) / 4)
        {
            temp = counter / 1239;
            result = counter;
        }
    printf("Result is %lf\n",result );
    return 0;
}

首先不加任何优化项进行编译:

[root@localhost 1031]# gcc -Wall count.c -o count
[root@localhost 1031]# time ./count
real    0m1.473s

user    0m1.479s
sys     0m0.010s

接下来使用优化项来对代码进行优化处理:

[root@localhost 1031]# gcc -Wall count.c -o count2
[root@localhost 1031]# time ./count2

real    0m1.357s
user    0m1.364s
sys     0m0.007s

对比两次执行的输出结果不难看出,程序的性能的确得到了改善。

尽管gcc的代码优化功能非常强大,但作为一名优秀的Linux程序员,首先还是要力求能够手工编写出高质量的代码。


程序开发的时候:优化等级越高,消耗在编译上的时间就越长,因此在开发的时候最好不要使用优化选项,只有到软件发行或开发结束的时候,才考虑对最终生成的代码进行优化。
资源受限的时候:一些优化选项会增加可执行代码的体积,如果程序在运行时能够申请到的内存资源非常紧张(如一些实时嵌入式设备),那就不要对代码进行优化,因为由这带来的负面影响可能会产生非常严重的后果。
跟踪调试的时候:在对代码进行优化的时候,某些代码可能会被删除或者改写,或者为了取得更佳的性能而进行重组,从而使跟踪和调试变得异常困难。
1 0
原创粉丝点击