一、c/c++記憶體分配
c/c++語言中,記憶體主要分配在一下五個儲存區:
1.棧:棧中儲存區域性變數以及函式實參, 由編譯器負責分配釋放,函式結束,棧中資料失效。
2堆:一般由程式設計師分配釋放, 若程式設計師不釋放,程式結束時可能由 os ** 。分配方式類似於鍊錶。
3全域性區/靜態區:存放全域性變數以及靜態變數。程式一經編譯好,該區域便存在。並且在c語言中初始化的全域性變數和靜態變數和未初始化的放在相鄰的兩個區域(在c++中,由於全域性變數和靜態變數編譯器會給這些變數自動初始化賦值,所以沒有區分了)。由於全域性變數一直佔據記憶體空間且不易維護,推薦少用。程式結束時釋放。
4常量區:存放各種常量(const修飾以及字串)。
5**區:存放二進位制**。
二、棧和堆的區別
1.棧是系統提供的功能,特點是效率高,缺點是資料不靈活;堆是函式庫提供的功能,資料適應面廣,但是效率較低。
2.棧是系統資料結構,對於程序/執行緒是唯一的;堆是函式庫內部結構,不一定唯一。
3.棧中資料分配與釋放,由編譯器自動完成;堆中需要手動完成。
4.棧向下生長,堆向上生長。
5.堆中會出現碎片,棧中不會,因為棧是後進先出的佇列。
三、例項
int a = 0;// 全域性初始化區
char *p1;// 全域性未初始化區
int main()
C C 記憶體分配
1 c c 記憶體分配 1 棧區 由編譯器自動分配和釋放,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 一般由程式設計師分配和釋放,若程式設計師不釋放,程式結束時可能由os 注意它與資料結構中的堆是兩回事。3 全域性 靜態 資料區 全域性變數和靜態變數的儲存是放在一塊...
C C 記憶體分配
記憶體分配方式 記憶體分配方式有三種 1 從靜態儲存區域分配。內存在程式編譯的時候就已經分配好,這塊內存在程式的整個執行期間都存在。例如全域性變數,static 變數。2 在棧上建立。在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置...
C C 記憶體分配
c c 記憶體分配 一 預備知識 程式的記憶體分配 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由...