C語(yǔ)言動(dòng)態(tài)存儲(chǔ)方式與靜態(tài)存儲(chǔ)方式
靜態(tài)存儲(chǔ)方式是指在程序運(yùn)行期間由系統(tǒng)分配固定的存儲(chǔ)空間的方式;動(dòng)態(tài)存儲(chǔ)方式是在程序運(yùn)行期間根據(jù)需要進(jìn)行動(dòng)態(tài)的分配存儲(chǔ)空間的方式。
內(nèi)存中的供用戶使用的存儲(chǔ)空間可以分為3部分,
- 程序區(qū)
- 靜態(tài)存儲(chǔ)區(qū)
- 動(dòng)態(tài)存儲(chǔ)區(qū)
全局變量全部存放在靜態(tài)存儲(chǔ)區(qū)中,在程序開(kāi)始執(zhí)行時(shí)給全局變量分配存儲(chǔ)區(qū),程序執(zhí)行完畢就釋放。
在動(dòng)態(tài)存儲(chǔ)區(qū)存放以下數(shù)據(jù)
- 函數(shù)形式參數(shù)。
- 函數(shù)中定義的沒(méi)有用關(guān)鍵字static聲明的變量,即自動(dòng)變量。
- 函數(shù)調(diào)用時(shí)的現(xiàn)場(chǎng)保護(hù)和返回地址等。
在C語(yǔ)言中,每一個(gè)變量和函數(shù)都有兩個(gè)屬性:
- 數(shù)據(jù)類型
- 數(shù)據(jù)的存儲(chǔ)類別。
C語(yǔ)言的存儲(chǔ)類別包括4種:
C語(yǔ)言局部變量的存儲(chǔ)類別
自動(dòng)變量(auto變量)
- 函數(shù)中的局部變量,如果不專門(mén)聲明static存儲(chǔ)類別,都是動(dòng)態(tài)地分配存儲(chǔ)空間的,數(shù)據(jù)存儲(chǔ)在動(dòng)態(tài)存儲(chǔ)區(qū)中。自動(dòng)變量用關(guān)鍵字auto做存儲(chǔ)類別聲明。
靜態(tài)局部變量(static局部變量)
- 函數(shù)中的局部變量的值在函數(shù)調(diào)用結(jié)束后不消失而繼續(xù)保留原值,即其占用的存儲(chǔ)單元不釋放,在下一次再調(diào)用該函數(shù)時(shí),該變量已有值。
寄存器變量(register變量)
- 為提高執(zhí)行效率,允許將局部變量的值放在CPU中的寄存器中,需要用時(shí)直接從寄存器取出參加運(yùn)算,不必再到內(nèi)存中去存取。由于對(duì)寄存器的存取速度遠(yuǎn)高于對(duì)內(nèi)存的存取速度,因此這樣做可以提高執(zhí)行效率,這種變量叫寄存器變量,用關(guān)鍵字register作聲明。
C語(yǔ)言全局變量的存儲(chǔ)類別
在一個(gè)文件內(nèi)擴(kuò)展外部變量的作用域
- 如果由于某種考慮,在定義點(diǎn)之前的函數(shù)需要引用該外部變量,則應(yīng)該在引用之前用關(guān)鍵字extern對(duì)該變量作“外部變量聲明”,表示把該外部變量的作用域擴(kuò)展到此位置。
將外部變量的作用域擴(kuò)展到其他文件。
將外部變量的作用域限制在本文件中。
注意,用auto、register和static聲明變量時(shí),是在定義變量的基礎(chǔ)上加上這些關(guān)鍵字,而不能單獨(dú)使用。
C語(yǔ)言****存儲(chǔ)類別案例
#include
int main()
{
auto int num1=10;
register int num2=20;
static int num3=30;
printf("%d\\n",num1);
printf("%d\\n",num2);
printf("%d\\n",num3);
return 0;
}
編譯運(yùn)行結(jié)果:
10
20
30
--------------------------------
Process exited after0.04696 secondswith return value0
請(qǐng)按任意鍵繼續(xù). . .
-
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7581瀏覽量
135547 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4256瀏覽量
62223 -
靜態(tài)存儲(chǔ)器
+關(guān)注
關(guān)注
0文章
10瀏覽量
7509
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論