1. 程式人生 > >Stack與Heap的區別

Stack與Heap的區別

申明:這裡所說的棧和堆是程式記憶體管理中的棧和堆,而不是資料結構裡的棧和堆。

  (1)儲存的內容不同:棧裡儲存的是區域性變數,而堆裡儲存的是動態申請的變數。

  (2)棧裡的記憶體系統自動申請和釋放,程式執行出申請的區域,記憶體就會自動釋放,而棧裡的記憶體需要手動地申請和釋放(malloc/free、new/delete)。如果不及時釋放會造成記憶體洩漏(Memory Leak)現象的發生。

  (3)棧的可用大小由編譯器確定,是一個常數,因此可能出現溢位的現象,堆的大小由系統可用虛擬記憶體確定,所以堆的可用記憶體大小更靈活。

  (4)棧的記憶體是連續的,堆的記憶體可能是不連續的。

  (5)棧向低地址生長,堆向高地址生長。

  (6)棧的存取效率比堆的存取效率高。