堆和棧的區別 堆和棧有什麼不同
- 生活
- 關注:1.44W次
堆與棧是開發人員必須要知道的兩個概念。在理解這兩個概念時,需要放到具體的場景下。因為不同場景下,與棧代表不同的含義。那麼,堆和棧的區別在哪裡呢?一起來看看吧!
堆和棧的區別
堆(Heap)是電腦科學中一類特殊的資料結構的統稱。堆通常是一個可以被看做一棵完全二元樹的陣列物件。其性質主要有兩點:1、堆中某個節點的值總是不大於或不小於其父節點的值;2、堆總是一棵完全二元樹。
棧(stack)又名堆疊,它是一種運算受限的線性表。限定僅在表尾進行插入和刪除操作的線性表。這一端被稱為棧頂,相對地,把另一端稱為棧底。
1、空間分配不同:棧由作業系統自動分配釋放,存放函式的引數值,區域性變數的值等,其操作方式類似於資料結構中的棧。而堆一般由程式設計師分配釋放,如果程式設計師不釋放,程式結束時可能由OS回收,分配方式倒是類似於連結串列。
2、快取方式不同:棧使用的是一級快取,通常被呼叫時處於儲存空間中,呼叫完畢立即釋放;而堆是存放在二級快取中,生命週期由虛擬機器的垃圾回收演算法來決定。所以,呼叫這些物件的速度相對來得低一些。
3、資料結構不同:堆的資料結構可以被看成是一棵樹,如堆排序;而棧是一種先進後出的資料結構。
- 文章版權屬於文章作者所有,轉載請註明 https://miaozhibang.com/shenghuoquan/shenghuo/ngyv5.html