暫存器變數

在程式運行時,根據需要到記憶體中相應的存儲單元中調用,如果一個變數在程式中頻繁使用,例如循環變數,那么,系統就必須多次訪問記憶體中的該單元,影響程式的執行效率。因此,C\C++語言還定義了一種變數,不是保存在記憶體上,而是直接存儲在CPU中的暫存器中,這種變數稱為暫存器變數。

基本介紹

暫存器變數的定義形式是:
register 類型標識符 變數名
暫存器是與機器硬體密切相關的,不同類型的計算機,暫存器的數目是不一樣的,通常為2到3個,對於在一個函式中說明的多於2到3個的暫存器變數,C編譯程式會自動地將暫存器變數變為自動變數
由於受硬體暫存器長度的限制,所以暫存器變數只能是char、int或指針型。暫存器說明符只能用於說明函式中的變數和函式中的形參,因此不允許將外部變數靜態變數說明為"register"。
register型變數常用於作為循環控制變數,這是使用它的高速特點的最佳場合。比較下面兩個程式的運算速度。
/* 程式1 */
main ( )
{
register int temp, i;
for ( i=0; i<=30000; i++ )
for ( temp=0; temp<=100; temp++ ) ;
printf ("ok\n");
}
/* 程式2 */
#include <stdio.h>
main( )
{
int temp, i;
for ( i=0; i<=30000; i++ )
for ( temp=0; temp<=100; temp++ ) ;
printf ("ok\n");
}
這兩個程式中,前者使用了兩個暫存器變數,後者使用了兩個自動變數程式除此之外完全一樣。但運行時感覺的執行速度是不同的,前者使用暫存器變數的程式要比後者使用自動變數的程式要快。(如果在Turbo C的環境下運行程式2,則應該將編譯器最佳化選項"use register variable"開關關上(OFF),否則,編譯器自動最佳化程式使用暫存器,兩個程式會得到相同的結果。)
由於register變數使用的是硬體CPU中的暫存器,暫存器變數無地址,所以不能使用取地址運算符"&"求暫存器變數的地址。

相關詞條

熱門詞條

聯絡我們