程式執行時作業系統把磁碟的**load到記憶體,然後分配給該程序乙個記憶體空間,分為堆區,棧區,全域性區和**區如圖1所示。作業系統找到main函式開始執行程式。
圖1 記憶體模型
**區:存放程式的二進位制**
全域性區:全域性變數和靜態變數。初始化的全域性變數和靜態變數在一塊區域,未初始化的全域性變數和未初始化的靜態變數在相鄰的另乙個區域。
棧區(static):由編譯器自動分配和釋放,存放函式的引數值,區域性變數值等。
堆區(heap):一般有程式設計師分配和釋放。如果程式設計師不釋放,在程式結束時可能有作業系統**。
char* func()
c 記憶體模型
1 棧區 由編譯器自動分配和釋放,存放函式的引數數值,區域性變數的值 其操作方式類似於資料結構中得棧 2 堆區一般由使用者分配和釋放,若使用者不釋放,程式結束時候由os 它與資料結構中堆是兩回事,分配方式類似鍊錶 3 全域性區 靜態區 static全域性變數和靜態變數的存放區域。初始化的全域性變數和...
C 記憶體模型
1.在c 中,不要在標頭檔案中進行變數宣告。因為單定義規則的存在,不同原始檔中對於同乙個全域性變數只能夠定義一次。因此如果在標頭檔案中包含變數定義,那麼很有可能使用相同標頭檔案的原始檔會對這個變數產生多次定義。2.new 與 delete等通過動態分配記憶體產生的資料將儲存在堆 heap 中。3.在...
C 記憶體模型
這塊內容很重要,然而部落格上很多人都說的不是很明白或者有一些小錯誤,還是要自己動手才能豐衣足食。參考c primer plus 第九章 按時間區分 自動變數和棧 自動變數包括函式定義中的變數和函式的引數。對自動變數的管理的常用方法是留出一段記憶體,並將其視為棧。儲存遵循先進先出原則,生命週期是 塊的...