解釋
在這裡“堆”是一種特殊的樹形數據結構,它滿足堆的特性:父節點的值一定大於或等於子節點的值。堆被認為在計算機算法中起到重要作用,並被用於各種程式語言,例如c++、Java等中。
套用範圍
● C++STL算法提供make_heap, push_heap和pop_heap等算法,它們作用於隨機存取疊代器。它們將疊代器當做數組的引用,並用array-to-heap轉換。在C++中我們可以用heap動態分配指針(new和delete)。
●Boost C++庫包含有堆庫。不同於STL, BoostC++支持增減運算,並且支持堆的附加類型,例如d-ary, binomial, Fibonacci, pairing 。
●在Java中堆是Java虛擬機JVM的記憶體數據區。Heap 的管理很複雜,每次分配不定長的記憶體空間,專門用來保存對象的實例。在Heap 中分配一定的記憶體來保存對象實例,實際上也只是保存對象實例的屬性值,屬性的類型和對象本身的類型標記等,並不保存對象的方法(方法是指令,保存在Stack中),在Heap 中分配一定的記憶體保存對象實例和對象的序列化比較類似。而對象實例在Heap 中分配好以後,需要在Stack中保存一個4位元組的Heap記憶體地址,用來定位該對象實例在Heap 中的位置,便於找到該對象實例。
由於Stack的記憶體管理是順序分配的,而且定長,不存在記憶體回收問題;而Heap 則是隨機分配記憶體,不定長度,存在記憶體分配和回收的問題;