图示GCC3重优化选项效果

本文通过一个简单的C程序,探讨了GCC编译器不同优化级别(-O1, -O2, -O3)对程序大小、运行速度的影响及对调试的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

源代码如下:

#include

int main(  )

{

     int i,j;

     long sum=0L;

     for( i=0;i<100000;i++ )

         for( j=0;j<1000;j++ )

             sum+=i*j;

     printf( "%ld/n",sum );

     return 0;

}

编译的命令为:

winlin@winlin-Satellite:~/Mypro$ gcc -Wall -O3 foo.c -o foo_O3

winlin@winlin-Satellite:~/Mypro$ gcc -Wall -O2 foo.c -o foo_O2

winlin@winlin-Satellite:~/Mypro$ gcc -Wall -O1 foo.c -o foo_O1

winlin@winlin-Satellite:~/Mypro$ gcc -Wall  foo.c -o foo

首先使用size进行比较:

  2

由分析可知在进行 -O2和-O3选项优化时,都比较明显的减小了text段的大小,-O选项优化时text段反而增加了一点;

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

然后使用time来进行比较:

1

由上面的图可知进行优化的时候,选择优化的等级越高,运行时间总是趋于越短;

#########################################################

下面我们来看一下进行优化了以后,对调试会有什么影响:

运行一下命令:

winlin@winlin-Satellite:~/Mypro$ gcc -Wall -c  foo.c -o foo.o

winlin@winlin-Satellite:~/Mypro$ gcc -Wall -c -O1 foo.c -o foo_O1.o

winlin@winlin-Satellite:~/Mypro$ gcc -Wall -c -O2 foo.c -o foo_O2.o

winlin@winlin-Satellite:~/Mypro$ gcc -Wall -c -O3 foo.c -o foo_O3.o

然后我们运行:

objdump -d foo.o

3

objdump -d foo_O1.o

4 

objdump -d foo_O2.o

5

objdump -d foo_O3.o

 6

另外如果我们使用“objdump -d foo”或者“objdump -d foo_Ox”的话,我们得到的结果和我们运行“objdump -d foo*.o”得到的结果几乎一样,

我们看到我们使用优化选项以后,相应的反汇编代码就会变得简短,所以对于优化过的应用程序,会增加我们反汇编的难度。

所以,很多书上推荐,只有当你发布releaes版本的时候,才进行优化,以便于我们调试和修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值