堆和棧的差別

2021-08-21 07:31:43 字數 285 閱讀 4203

①:棧由編譯器自動管理,堆由程式設計師控制,容易產生記憶體洩漏。

②:一般在32位系統下,堆記憶體可以達到4g;棧的空間很小,預設只有幾兆。

③:對於堆來說,因為頻繁的new/delete會造成記憶體空間的不連續,從而造成大量的碎片;棧是先進後出,不會有哪個在中間彈出。

④:從分配效率上講,棧是及其系統提供的資料結構,計算機底層堆疊有支援,由專門的暫存器存放棧的位址,壓棧出棧都由專門的指令執行,因此棧的效率比較高;堆是c++函式庫提供的,需要先呼叫operator new,然後呼叫型別的建構函式,比較複雜,效率不如棧。

堆和棧的差別(轉過無數次的文章)

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

堆和棧的差別(轉過無數次的文章)

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

堆和棧的差別(轉過無數次的文章)

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