c c 記憶體分割槽

2022-08-22 18:54:10 字數 635 閱讀 4130

主要用於儲存函式的引數和區域性變數。棧區由系統進行記憶體管理,在函式執行完成時,系統自動釋放棧區的記憶體,

而不需要使用者的參與,整個程式的棧區的大小可以在編譯器中由使用者自行設定。

由使用者手動申請,手動釋放。 如果使用者忘記對所申請的記憶體資源進行釋放,該記憶體資源可能會在程式結束時由操

作系統進行釋放(也可能不會)。

用來存放程式中的全域性變數和靜態變數。

在c語言中,初始化的全域性變數和靜態變數存放在一塊記憶體區域中,而未

初始化的全域性變數和靜態變數儲存在另一塊相鄰的儲存區域。

而在c++中則沒有在靜態儲存區中將初始化和未初始

化的進行分開儲存,因為c++會對未初始化全域性變數和靜態變數進行預設初始化(一般預設初始化為0)。該儲存區

域的資料會在

程式結束後由系統來釋放。

[注意]:

全域性變數和靜態變數在c++中儲存方式是一樣的,但不同的是全域性變數在整個源**中都是可以使用的,而靜態變數

只能在當前檔案中使用。

用來儲存程式中的常量, 比如const常量,字串常量等都儲存在這個區域。該儲存區域的資料會在程式結束時由系

統進行釋放。

存放程式體的二進位制**。 比如我們程式中自定義的函式,其函式體就是以二進位制**的形式儲存在這個區域的。

C C 記憶體分割槽

堆區 由程式設計人員手動申請,手動釋放,若不手動釋放,程式結束後由系統 生命週期是整個程式執行期間。使用malloc或者new進行堆的申請,堆的總大小為機器的虛擬記憶體的大小。ps self view 由malloc申請的叫做堆區,new申請的叫做自由儲存區 棧區由系統進行記憶體的管理。主要存放函式...

c c 程式的記憶體分割槽模型詳解

我們要想執行我們編寫的c程式,那麼第一步需要對這個程式進行編譯。預處理 巨集定義展開 標頭檔案展開 條件編譯,這裡並不會檢查語法 編譯 檢查語法,將預處理後檔案編譯生成彙編檔案 彙編 將彙編檔案生成目標檔案 二進位制檔案 在沒有執行程式前,也就是說程式沒有載入到 記憶體前,可執行程式內部已經分好3段...

C C 編譯的程式占用的記憶體分割槽

c c 編譯的程式占用的記憶體分割槽 1 棧區 stack 由編譯器自動分配釋放,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 注意它與資料結構中的堆是兩回事,分配方式倒是類似於鍊錶,呵呵。...