?? codetc11b.dat
字號:
一般情況下,變量(包括靜態存儲方式和動態存儲方式)的值是存放在內存中的.當程序中用到哪一個變量的值時,由控制 器發出指令將內存中該變量的值送到運算器中.經過運算器進行運算,如果需要存數,再從運算器將數據送到內存存放.
如果有一些變量使用頻繁(例如在一人函數中執行9999次循環, 每次循環中都要引用某局部變量),則為存取變量的值要 花不少時間.為提高執行效率,C語言允許將局部變量的 值放在CPU中的寄存器中,需要用時直接從寄存器取出參加運算 ,不必再到內存中去存取 .由于對寄存器的存取速度遠高于對內存的存取速度, 因此這樣做可以提高執行效率.這種變 量叫做"寄存器變量",用關鍵字register作聲明.例如:輸出1到5的階乘的值.
int fac(int n)
{
register int i,f=1; /* 定義寄存器變量 */
for(i=1;i<=n;i++)
f=f*i;
}
main()
{
int i;
for(i=1;i<=5;i++)
printf("%d!=%d\n",i,fac(i));
}
定義局部變量f和i是寄存器變量,如果n的值大,則能節約許多執行時間.
----
說明: 1. 只有局部自動變量和形式參數可以作為寄存器變量,其他(如全局變量)不行.在調用一個函數時占用一些寄存 器以存放寄存器變量的值, 函數調用結束釋放寄存器.此后,在調用另一個函數時又可以利用它來存放該函數 的寄存器變量.
2. 一個計算機系統中的寄存器數目是有限的,不能定義任意多個寄存變量.不同的系統允許使用的寄存器是不同 的, 而且對register變量的處理方法也是不同的, 有的系統對register變量當作自動變理處理,分配內存單 元,并不真正把它們存放在寄存器中,有的系統只允許將 int,char和指針型變量定義為寄存器變量.當今的優 化編譯系統能夠識別使用頻繁的變量,從而自動地將這些變量放在寄存器中,而不需要程序設計者指定.因此 在實際上用register聲明變量是不必要的.讀者對它有一定了解即可.
3. 局部靜態變量不能定義為寄存器變量.不能寫成 register static inta,b,c;不能把變量a,b,c既放在靜態 存儲區中,又放在寄存器中, 二者只能居 其一.對一個變量只能聲明為一個存儲類別.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -