什麼是堆分配?


堆分配是最靈活的分配方案。記憶體的分配和釋放可以在任何時間和任何地點進行,具體取決於使用者的需求。堆分配用於動態地為變數分配記憶體,當不再使用變數時,將其回收。

堆管理是資料結構理論中的一個專門領域。堆管理器通常會帶來一些時間和空間開銷。出於效率原因,將特定大小的小型啟用記錄作為特殊情況處理可能很有用,如下所示:

  • 對於每個感興趣的大小,維護該大小的空閒塊的連結列表。
  • 如果可能,用大小為 S' 的塊來滿足大小為 s 的請求,其中 S' 是大於或等於 s 的最小大小。當塊被釋放時,將其返回到連結列表。
  • 對於更大的儲存塊,使用堆管理器。

堆管理使用兩種方法,如下所示:

垃圾回收方法

當所有訪問某個物件的路徑都被銷燬,但資料物件仍然存在時,此類物件被稱為垃圾。垃圾回收是一種用於重用該物件空間的技術。

在垃圾回收中,首先,我們標記所有活動物件,所有其餘元素(其垃圾回收“開啟”)都被視為垃圾並返回到空閒空間列表。

引用計數

透過引用計數,嘗試在堆儲存的每個元素無法再被訪問後立即回收它。

堆上的每個記憶體單元都關聯一個引用計數器,其中包含指向它的值的個數。每次有新的值指向該單元時,計數器加 1;每次某個值不再指向它時,計數器減 1。當計數器變為零時,該單元將返回到空閒列表以供進一步分配。

堆分配的特性

堆分配具有多種特性,如下所示:

  • 空間效率- 記憶體管理器應最大限度地減少程式所需的總堆空間。
  • 程式效率- 記憶體管理器應充分利用記憶體子系統,以加快程式執行速度。因為執行指令所需的時間會因物件在記憶體中的位置而異。
  • 低開銷- 記憶體分配和釋放在許多程式中都是頻繁的操作。這些操作必須儘可能高效。也就是說,需要最大限度地減少開銷。執行時間中用於執行分配和釋放的比例。


更新於:2021-11-08

14K+ 瀏覽量

開啟您的 職業生涯

透過完成課程獲得認證

立即開始
廣告