天天看點

C語言變量存儲區域 程序記憶體布局

更加詳細的程序記憶體布局可以檢視 http://blog.csdn.net/yusiguyuan/article/details/45155035

一個程序的記憶體通常分為幾個大區:共享存儲區、棧區、堆區、全局靜态區、文字常量區,此外還有程式代碼區,其中,全局靜态區又可以分為全局非初始化區和全局初始化區,從具體程式中來看,初始化和非初始化的全局OR全局靜态OR局部靜态變量,其位址相差并不遠,但還是可以看到明顯的非初始化和初始化有分隔。 關于初始化和非初始化的問題,我們一般認為全局變量、static變量在不顯示初始化時都會預設初始化,這是肯定的,而在gcc測試時,局部變量未顯示初始化,也會自動預設初始化為0,可能是編譯器已經做了這方面的優化。

共享存儲區是在測試IPC通信shmget發現的,在我的機器上,其位址與最高的棧區相差甚遠,還在很高的位址上。 棧區存儲局部非static變量甚至局部const變量,局部static變量不在這裡存儲。 堆區用于存儲用malloc等動态申請了空間的變量。 全局靜态區存儲全局變量、static變量不管局部還是全局,全局const變量未顯示初始化則會存放在這個區中,不會存放在常量區。這個區域還明顯分開了初始化的和未初始化的兩塊區域。 文字常量區存放初始化的全局const、字元串字面量。

C語言變量存儲區域 程式記憶體布局

繼續閱讀