代碼優化是指編譯器經過分析源代碼,找出其中還沒有達到最優的部分,而後對其從新進行組合,目的是改善程序的執行性能。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代碼優化功能很強大,但仍是要力求能手工編寫出高質量的代碼。若是寫的代碼簡短,而且邏輯性強,編譯器就不會作更多的工做,甚至根本不用進行優化。優化雖然能給程序帶來更好的執行性能,但在一些場合中應避免優化代碼: