棧 堆的特點 區別

2021-10-08 17:57:04 字數 469 閱讀 8728

記憶體五大區域

棧(stack)

堆(heap)

靜態區(全域性區)又分為bss段(未初始化的全域性變數、靜態變數)

data段(初始化的全域性變數、靜態變數)

常量區**區

1、棧(stack)— 由編譯器自動分配釋放 ,存放函式的引數值,區域性變數的值等。棧是向低址擴充套件的資料結構,是一塊連續的記憶體的區域。是棧頂的位址和棧的最大容量是系統預先規定好的,棧的大小是2m

由系統自動分配,速度較快,不會產生記憶體碎片。

2、堆(heap) — 一般由程式設計師分配(malloc\realloc\alloc)釋放, 若程式設計師不釋放,程式結束時可能由os** 。堆是由低向高位址擴充套件的類似鍊錶資料結構,是不連續的記憶體區域。(這是由於系統使用鍊錶來儲存的空閒記憶體位址,而鍊錶的遍歷方向是由低位址向高位址)

由alloc分配的記憶體,速度比較慢,而且容易產生記憶體碎片,不過使用起來最方便。

棧 與 堆 的區別

預備知識 堆與棧有什麼區別?一 預備知識 程式的記憶體分配 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束...

堆和棧的區別

一直就搞不清出這個問題,今天上網想起來,隨即搜了搜,找到了一些資料。不知源作者是誰。姑且 拿來主義 一下,呵呵。一 預備知識 程式的記憶體分配 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結...

堆和棧的區別

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