1、存儲類 含義 描述變數空間開闢於記憶體中什麼地方,記憶體被分為棧、堆、數據段、bss段、text段等管理方法的記憶體段,變數空間開闢於這些段中。如局部變數(棧)、被顯示初始化為非0的全局變數和被初始化為非0的static局部變數(data段)、顯示初始化為0和沒有顯示初始化的全局變數(bss段) 2、 ...
1、存儲類
含義
描述變數空間開闢於記憶體中什麼地方,記憶體被分為棧、堆、數據段、bss段、text段等管理方法的記憶體段,變數空間開闢於這些段中。如局部變數(棧)、被顯示初始化為非0的全局變數和被初始化為非0的static局部變數(data段)、顯示初始化為0和沒有顯示初始化的全局變數(bss段)
int var1=1; //數據段
int var2; //bss段
int var3=0; //bss段
int main()
{
int var4=1;//棧
return 0;
}
2、作用域
C語言變數的作用域規則是代碼塊的作用域,代碼塊:{ }括起來的範圍,變數的作用域為{ }中變數定義開始往後的部分。
3、生命周期
運行時分配記憶體空間給變數,使用後收回這個空間,此後記憶體地址與這個變數無關。
4、鏈接屬性
程式從源代碼到最終可執行程式,經歷的過程為預編譯、編譯、彙編和鏈接。編譯是把源代碼翻譯成xx.o的目標文件,目標文件中有符號(變數名、函數名等)、代碼段、數據段、bss段等,運行時變數名、函數名和相應的記憶體對應起來,靠符號來鏈接。C語言的符號有三種鏈接屬性:外鏈接屬性、內鏈接屬性、無鏈接屬性。
Linux下C程式的記憶體映像
rodata段:存儲常量數據,又稱只讀段
文件映射區:進程打開文件後,將文件內容從硬碟讀取到進程的文件映射區,直接在記憶體中操控這個文件,讀寫完成後保存,再將記憶體中的文件寫到硬碟中區。
內核映射區:將操作系統內核程式映射到這個區域。
存儲類相關關鍵字
(1)auto
作用:修飾局部變數,自動局部變數,分配在棧上,初始化值是隨機的,因為棧記憶體有臟記憶體的特點(棧和堆記憶體使用特點)
(2)static
用法:1)修飾局部變數,形成靜態局部變數
2)修飾全局變數,形成靜態全局變數
靜態局部變數與動態局部變數的本質區別:存儲類不同
靜態局部變數:data段或bss段; 動態局部變數:棧
靜態局部變數的全局變數的區別:作用域連接屬性不同
靜態局部變數:作用域(代碼塊作用域)鏈接屬性(無鏈接)
全局變數:作用域(文件作用域)鏈接屬性(外鏈接)
(3)register
作用:寄存器變數效率高,寄存器數量有限,要謹慎使用。