代码优化是指编译器经过分析源代码,找出其中还没有达到最优的部分,而后对其从新进行组合,目的是改善程序的执行性能。GCC提供的代码优化功能很是强大,它经过编译选项-On来控制优化代码的生成,其中n是一个表明优化级别的整数,比较典型的范围是从0变化到2或3。程序员
编译时使用选项-O能够告诉GCC同时减少目标代码的长度和执行时间,其效果等价于-O1。选项-O2告诉GCC除了完成-O1级别的优化以外,同时还要进行一些额外的调整工做,如处理器指令调度等。选项-O3则除了完成-O2级别的优化以外,还包括循环展开和其余一些与处理器特性相关的优化工做。一般来讲,数字越大优化的等级越高,同时也意味着程序的运行速度越快。许多程序员喜欢使用-O2选项,由于它在优化长度、编译时间和代码大小之间取得了一个比较理想的平衡点。性能
下面对程序optimize.c进行代码优化演示。测试
1 #include<stdio.h> 2 3 int main(void) 4 { 5 double counter; 6 double result; 7 double temp; 8 9 for(counter = 0; counter < 2000.0*2000.0*2000.0/20.0+2020; counter += (5-1)/4) 10 { 11 temp = counter / 1979; 12 result = counter; 13 } 14 15 printf("Result is %lf\n", result); 16 17 return 0; 18 }
(1) 不加任何优化选项进行编译:优化
gcc -Wall optimize.c -o optimizespa
(2) 借助Linux提供的time命令,统计出改程序在运行时所需的时间:调试
time ./optimizecode
Result is 400002019.000000blog
real 0m6.261s内存
user 0m6.250s资源
sys 0m0.000s
(3) 使用优化选项来对代码进行优化处理:
gcc -Wall -O optimize.c -o optimize
(4) 一样条件下再测试一下运行时间:
time ./optimize
Result is 400002019.000000
real 0m1.964s
user 0m1.960s
sys 0m0.000s
对比两次结果不难看出,程序的性能获得了很大幅度的改善,由原来的6s缩短到1s。尽管GCC代码优化功能很强大,但仍是要力求能手工编写出高质量的代码。若是写的代码简短,而且逻辑性强,编译器就不会作更多的工做,甚至根本不用进行优化。优化虽然能给程序带来更好的执行性能,但在一些场合中应避免优化代码: