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

#硬聲創(chuàng)作季 39C語言最新標(biāo)準(zhǔn)化學(xué)習(xí)課程 數(shù)據(jù)存儲方式_存數(shù)據(jù)

#硬聲創(chuàng)作季 40C語言最新標(biāo)準(zhǔn)化學(xué)習(xí)課程 數(shù)據(jù)存儲方式_取數(shù)據(jù)
FPGA的rom存儲方式是什么?
【原創(chuàng)】單片機C語言程序的存儲區(qū)域解讀
單片機C語言程序的存儲區(qū)域解讀
C51語言的變量定義方式
數(shù)據(jù)存儲方式
C語言怎么建立內(nèi)存的動態(tài)分配
什么是堆內(nèi)存?存儲方式是什么樣的?

評論