堆和棧區別

2021-09-25 03:15:56 字數 956 閱讀 2374

堆區和棧區:程式執行時的記憶體區域

我們把記憶體分為堆空間和棧空間。

棧空間比較小,但是讀取速度快

堆空間比較大,但是讀取速度慢

1.棧區

棧的特徵:

資料只能從棧的頂端插入和刪除

把資料放入棧頂稱為入棧(push)

從棧頂刪除資料稱為出棧(pop)

簡單地說:先進後出
2.堆(區分資料結構中堆(top k)二者沒有任何關係)

堆是一塊記憶體區域,與棧不同,堆裡的記憶體能夠以任意順序存入和移除

棧和棧區棧棧區

具有後進先出的特點

是一塊實實在在存在的記憶體空間

是一種資料結構

是按照棧的特性(後進先出)實現的

棧和佇列的區別

1.佇列先進先出,棧先進後出

2.對插入和刪除操作的"限定"

棧是限定只能在表的一端進行插入和刪除操作的線性表

佇列是限定只能在表的一端進行插入和在另一端進行刪除操作的線性表。

3.遍歷資料速度不同

棧只能從頭部取資料,也就最先放入的需要遍歷整個棧最後才能取出來,而且在遍歷資料的

時候還得為資料開闢臨時空間,保持資料在遍歷前的一致性

佇列則不同,它基於位址指標進行遍歷,而且可以從頭或尾部開始遍歷,但不能同時遍歷,

無需開闢臨時空間,因為在遍歷的過程中不影像資料結構,速度要快的多

堆和棧區別

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

堆和棧區別

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

堆和棧區別

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