C 程式中各種變數的記憶體分配

2021-08-18 01:22:29 字數 490 閱讀 3806

c++程式中各種變數的記憶體分配

首先可以看下c++程式將記憶體分為幾個區域:

1、棧。該記憶體區域一般是由作業系統自動分配的,我們不用考慮刪除問題。函式的引數,函式體中我們定義的變數,一般都是在棧中分配記憶體的。這些記憶體的分配一般在函式呼叫時才分配記憶體

2、堆。堆中分配的記憶體一般是程式設計師自己分配的,比如我們使用new(c++),malloc(c)來分配記憶體中,這些分配的記憶體都是放在堆中的。這些記憶體要由我們自己釋放,os在記憶體足夠使用的時候,不會去釋放這些記憶體

3、全域性/靜態儲存區。所有的全域性變數跟靜態變數都是在這個區域,如果全域性變數沒有初始化,那麼這個 未初始化的全域性變數與   靜態變數跟已經初始化的全域性變數在相鄰的區域。

4、常量儲存區。這裡一般放的是字串。

5、**段(文字段)儲存程式**的01進製檔案

程式中的記憶體分配

棧由作業系統自動分配釋放,用於存放函式的引數值 區域性變數等,其操作方式類似於資料結構中的棧 1.函式中定義的區域性變數按照先後定義的順序依次壓入棧中,也就是說相鄰變數的位址之間不會存在其它變數。2.棧的記憶體位址生長方向與堆相反,由高到底,所以後定義的變數位址低於先定義的變數 3.棧中儲存的資料的...

C 中的變數記憶體分配方式

c 中的變數可能分配在5個地方中的乙個 棧 堆 自由儲存區 全域性 靜態儲存區 常量儲存區。其中,區域性變數,函式的形參是分配在棧中的。這段記憶體由編譯器自動分配 釋放。new和delete用來申請的釋放堆上的記憶體。malloc和free用來釋放自由儲存區上的記憶體。全域性變數 static都分配...

c 程式記憶體分配

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