C語言 register 變量
一般情況下,變量數(shù)組等都是存儲在內(nèi)存中的,如果程序中某個代碼段(如循環(huán))會對一個變量反復(fù)讀寫,這樣就需要頻繁訪問內(nèi)存,如果將頻繁操作的變量放在CPU內(nèi)部,就不需要訪問內(nèi)存了。為此,C語言提供了寄存器變量。這種變量存放在CPU的寄存器中,使用時不需要訪問內(nèi)存,而直接從寄存器中讀寫,寄存器變量的定義形式是:
register 數(shù)據(jù)類型 變量表列;
說明:
(1)變量存儲在寄存器中讀寫操作比儲存在內(nèi)存中快,所以建議將循環(huán)次數(shù)較多的循環(huán)控制變量及循環(huán)體內(nèi)反復(fù)使用的變量均定義為寄存器變量。
(2)計算機(jī)系統(tǒng)中寄存器的數(shù)目是有限的,所以不能把所有變量全部定義為寄存器變量。C語 言編譯系統(tǒng)會自動地將超過限制數(shù)目的寄存器變量當(dāng)作自動變量進(jìn)行處理。
(3)只有局部變量和形參可以作為寄存器變量,其他如全局變量不可以,局部靜態(tài)變置也不可以定義成寄存器型。
(4)對于寄存器變量,當(dāng)函數(shù)調(diào)用時,會占用一些寄存器存放寄存器變量,當(dāng)函數(shù)調(diào)用結(jié)束,釋放所占寄存器。
(5)不同編譯系統(tǒng)對寄存器變量的處理是不一樣的,有的編譯系統(tǒng)直接把寄存器變量作為auto變量,分配內(nèi)存空間,并不真的將它們存放在CPU的寄存器中。
例如:
#include <stdio.h>
int fun(int n)
{
register int s=0,i;
for (i=l;i<=n;i++)
s=s+i;
return s;
}
main()
{
int n;
printf("input n:\n");
scanf("%d",&n);
printf("%d\n",fun(n));
}
程序中的fun()函數(shù)的i為循環(huán)變量,s為每次循環(huán)需要累加操作,所以經(jīng)常使用,因此將其定義為寄存器變量。
點擊加載更多評論>>