棧和堆的區別

2021-09-27 03:47:06 字數 304 閱讀 1889

堆是由低位址向高位址擴充套件,棧是由高位址向低位址擴充套件。

堆中記憶體需要手動申請和手動釋放,棧中記憶體由os自動申請,自動釋放,存放著引數區域性變數等記憶體。

堆中頻繁調動malloc和free,會產生記憶體碎片,降低程式效率。棧採用先進後出原則,不會產生記憶體碎片。

堆的分配效率較低,棧的分配效率較高。

棧的效率更高的原因:

棧是作業系統提供的資料結構,計算機底層對棧提供了一系列支援:分配專門的暫存器儲存棧的位址,壓棧和入棧有專門的指令執行;而堆是由c/c++函式庫提供的,需要一些列來分配記憶體合併記憶體和釋放記憶體的演算法,因此效率較低。

堆和棧區別

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

堆和棧區別

管理方式 棧由編譯器自動管理 堆由程式設計師控制,使用方便,但易產生記憶體洩露。生長方向 棧向低位址擴充套件 即 向下生長 是連續的記憶體區域 堆向高位址擴充套件 即 向上生長 是不連續的記憶體區域。這是由於系統用鍊錶來儲存空閒記憶體位址,自然不連續,而鍊錶從低位址向高位址遍歷。空間大小 棧頂位址和...

堆和棧區別

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