C語(yǔ)言 register 變量
一般情況下,變量數(shù)組等都是存儲(chǔ)在內(nèi)存中的,如果程序中某個(gè)代碼段(如循環(huán))會(huì)對(duì)一個(gè)變量反復(fù)讀寫(xiě),這樣就需要頻繁訪問(wèn)內(nèi)存,如果將頻繁操作的變量放在CPU內(nèi)部,就不需要訪問(wèn)內(nèi)存了。為此,C語(yǔ)言提供了寄存器變量。這種變量存放在CPU的寄存器中,使用時(shí)不需要訪問(wèn)內(nèi)存,而直接從寄存器中讀寫(xiě),寄存器變量的定義形式是:
register 數(shù)據(jù)類型 變量表列;
說(shuō)明:
(1)變量存儲(chǔ)在寄存器中讀寫(xiě)操作比儲(chǔ)存在內(nèi)存中快,所以建議將循環(huán)次數(shù)較多的循環(huán)控制變量及循環(huán)體內(nèi)反復(fù)使用的變量均定義為寄存器變量。
(2)計(jì)算機(jī)系統(tǒng)中寄存器的數(shù)目是有限的,所以不能把所有變量全部定義為寄存器變量。C語(yǔ) 言編譯系統(tǒng)會(huì)自動(dòng)地將超過(guò)限制數(shù)目的寄存器變量當(dāng)作自動(dòng)變量進(jìn)行處理。
(3)只有局部變量和形參可以作為寄存器變量,其他如全局變量不可以,局部靜態(tài)變置也不可以定義成寄存器型。
(4)對(duì)于寄存器變量,當(dāng)函數(shù)調(diào)用時(shí),會(huì)占用一些寄存器存放寄存器變量,當(dāng)函數(shù)調(diào)用結(jié)束,釋放所占寄存器。
(5)不同編譯系統(tǒng)對(duì)寄存器變量的處理是不一樣的,有的編譯系統(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)常使用,因此將其定義為寄存器變量。
點(diǎn)擊加載更多評(píng)論>>