C記憶體配置設定方式:
- 棧區(stack)—由編譯器自動配置設定釋放,存放函數的參數值,局部變量的值等。其操作方式類似于資料結構中的棧。
- 堆區(heap)—一般由程式員配置設定釋放,若程式員不釋放,程式結束時可能由OS回收。注意它與資料結構中的堆是兩回事,配置設定方式倒是類似于連結清單
- 全局區(靜态區)(static)—全局變量和靜态變量的存儲是放在一塊的,初始化的全局變量和靜态變量在一塊區域,未初始化的全局變量和未初始化的靜态變量在相鄰的另一塊區域。 程式結束後由系統釋放。
- 常量區—常量字元串就是放在這裡的,直到程式結束後由系統釋放。
- 代碼區—存放函數體的二進制代碼。
注:malloc函數的實質展現在,它有一個将可用的記憶體塊連接配接為一個長長的清單的所謂空閑連結清單。調用malloc函數時,它沿連接配接表尋找一個大到足以滿足使用者請求所需要的記憶體塊。然後,将該記憶體塊一分為二(一塊的大小與使用者請求的大小相等,另一塊的大小就是剩下的位元組)。接下來,将配置設定給使用者的那塊記憶體傳給使用者,并将剩下的那塊(如果有的話)傳回到連接配接表上。調用free函數時,它将使用者釋放的記憶體塊連接配接到空閑鍊上。到最後,空閑鍊會被切成很多的小記憶體片段,如果這時使用者申請一個大的記憶體片段,那麼空閑鍊上可能沒有可以滿足使用者要求的片段了。于是,malloc函數請求延時,并開始在空閑鍊上翻箱倒櫃地檢查各記憶體片段,對它們進行整理,将相鄰的小空閑塊合并成較大的記憶體塊。如果無法獲得符合要求的記憶體塊,malloc函數會傳回NULL指針,是以在調用malloc動态申請記憶體塊時,一定要進行傳回值的判斷。
C++記憶體配置設定方式:
- 棧區(stack)—就是那些由編譯器在需要的時候配置設定,在不需要的時候自動清除的變量的存儲區。裡面的變量通常是局部變量、函數參數等。在一個程序中,位于使用者虛拟位址空間頂部的是使用者棧,編譯器用它來實作函數的調用
- 堆區(heap)—就是那些由 new 配置設定的記憶體塊,他們的釋放編譯器不去管,由我們的應用程式去控制,一般一個 new 就要對應一個 delete。如果程式員沒有釋放掉,那麼在程式結束後,作業系統會自動回收。堆可以動态地擴充和收縮。
- 全局區存儲區(靜态區)(static)—這是一塊比較特殊的存儲區,他們裡面存放的是常量,不允許修改(當然,你要通過非正當手段也可以修改,而且方法很多)
- 自由存儲區 — 就是那些由 malloc 等配置設定的記憶體塊,他和堆是十分相似的,不過它是用 free 來結束自己的生命的
相關連結:
C++:http://www.cnblogs.com/daocaoren/archive/2011/06/29/2092957.html
C:http://www.cnblogs.com/coder2012/p/3150757.html