位置:首頁 > 軟件操作教程 > 編程開發(fā) > C語言 > 問題詳情

C語言 register 變量

提問人:劉團(tuán)圓發(fā)布時間:2020-12-01

    一般情況下,變量數(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)常使用,因此將其定義為寄存器變量。

繼續(xù)查找其他問題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部