什麼是堆分配?
堆分配是最靈活的分配方案。記憶體的分配和釋放可以在任何時間和任何地點進行,具體取決於使用者的需求。堆分配用於動態地為變數分配記憶體,當不再使用變數時,將其回收。
堆管理是資料結構理論中的一個專門領域。堆管理器通常會帶來一些時間和空間開銷。出於效率原因,將特定大小的小型啟用記錄作為特殊情況處理可能很有用,如下所示:
- 對於每個感興趣的大小,維護該大小的空閒塊的連結列表。
- 如果可能,用大小為 S' 的塊來滿足大小為 s 的請求,其中 S' 是大於或等於 s 的最小大小。當塊被釋放時,將其返回到連結列表。
- 對於更大的儲存塊,使用堆管理器。
堆管理使用兩種方法,如下所示:
垃圾回收方法
當所有訪問某個物件的路徑都被銷燬,但資料物件仍然存在時,此類物件被稱為垃圾。垃圾回收是一種用於重用該物件空間的技術。
在垃圾回收中,首先,我們標記所有活動物件,所有其餘元素(其垃圾回收“開啟”)都被視為垃圾並返回到空閒空間列表。
引用計數
透過引用計數,嘗試在堆儲存的每個元素無法再被訪問後立即回收它。
堆上的每個記憶體單元都關聯一個引用計數器,其中包含指向它的值的個數。每次有新的值指向該單元時,計數器加 1;每次某個值不再指向它時,計數器減 1。當計數器變為零時,該單元將返回到空閒列表以供進一步分配。
堆分配的特性
堆分配具有多種特性,如下所示:
- 空間效率- 記憶體管理器應最大限度地減少程式所需的總堆空間。
- 程式效率- 記憶體管理器應充分利用記憶體子系統,以加快程式執行速度。因為執行指令所需的時間會因物件在記憶體中的位置而異。
- 低開銷- 記憶體分配和釋放在許多程式中都是頻繁的操作。這些操作必須儘可能高效。也就是說,需要最大限度地減少開銷。執行時間中用於執行分配和釋放的比例。
廣告