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

C語(yǔ)言 register 變量

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

    一般情況下,變量數(shù)組等都是存儲(chǔ)在內(nèi)存中的,如果程序中某個(gè)代碼段(如循環(huán))會(huì)對(duì)一個(gè)變量反復(fù)讀寫,這樣就需要頻繁訪問內(nèi)存,如果將頻繁操作的變量放在CPU內(nèi)部,就不需要訪問內(nèi)存了。為此,C語(yǔ)言提供了寄存器變量。這種變量存放在CPU的寄存器中,使用時(shí)不需要訪問內(nèi)存,而直接從寄存器中讀寫,寄存器變量的定義形式是:

    register  數(shù)據(jù)類型  變量表列;

說明:

(1)變量存儲(chǔ)在寄存器中讀寫操作比儲(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)地將超過限制數(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)常使用,因此將其定義為寄存器變量。

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

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