堆和棧區別

2022-09-11 13:12:22 字數 527 閱讀 7215

空間分配方式

棧(作業系統):由作業系統自動分配釋放 ,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。

堆(作業系統): 一般由程式設計師分配釋放, 若程式設計師不釋放,程式結束時可能由os**,分配方式倒是類似於鍊錶

進出方式:

堆,佇列優先,先進先出(fifo—first in first out)

棧,先進後出(filo—first-in/last-out)

棧使用的是一級快取, 他們通常都是被呼叫時處於儲存空間中,呼叫完畢立即釋放。

堆則是存放在二級快取中,生命週期由虛擬機器的垃圾**演算法來決定(並不是一旦成為孤兒物件就能被**)。所以呼叫這些物件的速度要相對來得低一些。

堆(資料結構):堆可以被看成是一棵樹,如:堆排序。

棧(資料結構):一種先進後出的資料結構。

從資料儲存方面來說

棧空間中一般儲存基本資料型別,物件的位址;

堆空間一般存放物件本身,block的copy等。

堆和棧區別

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

堆和棧區別

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

堆和棧區別

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