c c 程式編譯後的記憶體分布

2021-04-29 21:57:27 字數 492 閱讀 9422

乙個由c/c++編譯的程式占用的記憶體分為以下幾個部分

1、棧區(stack)—> 由編譯器自動分配釋放,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。

2、堆區(heap)—> 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os**。注意它與資料結構中的堆是兩回事,分配方式倒是類似於鍊錶,呵呵。

3、全域性區(靜態區)(static)—>全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態變數在一塊區域,未初始化的全域性變數和未初始化的靜態變數在相鄰的另一塊區域。- 程式結束後由系統釋放

4、文字常量區—>常量字串就是放在這裡的。程式結束後由系統釋放

5、程式**區—>存放函式體的二進位制**。

二、例子程式

這是乙個前輩寫的,非常詳細

//main.cpp

int a = 0; //全域性初始化區

char *p1; //全域性未初始化區

main()

C C 程式啟動後記憶體分布

1 從低位址開始,依次是 區,資料區 包含靜態資料區 常量資料區 堆 自下向上生長 動態庫的檔案對映 棧 3 不同執行緒的棧有一定的間距,基本等同於執行緒棧的限制大小,執行緒切換前會儲存當前執行緒的棧頂,這樣當再次切換回來時,可以從棧頂向下分配 4 程式的有些記憶體之存在虛擬位址空間,如果實際沒有使...

C C 程式的記憶體分布

理解c c 程式中的記憶體分布,可以幫助我們減少程式設計時犯常見的錯誤,如將指向區域性變數的位址返回等。在c c 中,通常可以把記憶體理解成4個分割槽 棧 堆 全域性 靜態儲存區和常量儲存區。1 棧 通常是用於那些在編譯期間就能確定儲存大小的變數的儲存區,用於在函式作用域內 塊作用域 建立 在離開作...

c C 編譯的程式占用的記憶體

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