寄存器存在於CPU內部,運算速度非常快, 因為內存中的數據必須載入寄存器才能計算。如果直接定義一個變量為寄存器變量,則少了載入等過程自然會快。對於頻繁使用的變量可以把它放在寄存器中來提速度。
對於VC編譯器會自動優化,即使沒有聲明寄存器變量,VC也會自動優化。
對於GCC編譯器就不會自動優化。
定義一個寄存器變量:
2 3 void main() 4 { 5 register int i = 0; 6 //&i; //寄存器變量放在cpu中,沒有地址, 但是c++中沒問題 7 }
接下來,通過gcc編譯器來編譯下面代碼,測試執行速度。
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<time.h> 4 5 void main4() 6 { 7 time_t start,end; 8 time(&start);//獲取當前時間,放在start變量中 9 10 //這里用的是gcc的編譯器,即這里不會自動優化。 11 // 測試如下沒有設置寄存器變量,程序運行需要8秒 12 //double res = 0.0;//結果 13 //long int i = 0; 14 15 //定義寄存器變量 ,執行只需要4-5秒,效率高不少。 16 register double res = 0.0; 17 register long int i = 0; 18 19 for (;i<2500000000;i++) 20 { 21 res += i; 22 } 23 printf("%f\n",res); 24 25 time(&end); //獲取當前時間放在end中 26 27 printf("%d",(unsigned int)(end - start)); //獲取時間差 28 }
通過上面代碼可以得出結論,對於頻繁使用的變量完全可以給它前面加上關鍵字register, 定義成寄存器變量。
最后值得注意下面2點:
1 //全局變量最好不要占用寄存器,會影響程序的速度 2 register int num = 1000; 3 4 //靜態變量無法定義為寄存器變量,靜態變量存在靜態區 5 register static double res = 0.0;