什麼是儲存管理?


編譯器需要為作業系統分配一塊記憶體。編譯器使用這塊記憶體來實現已編譯的程式。這塊記憶體被稱為儲存管理。編譯器應該執行的任務是指定目標機器的資源,以定義原始碼正在操作的資料物件。

儲存管理主要包含以下三個階段:

  • **初始分配** - 最初,每塊儲存空間要麼是空閒的,要麼正在使用。如果是空閒的,則在執行過程中可用於動態分配。儲存管理系統需要幾種方法來跟蹤空閒儲存空間以及在執行過程中根據需要進行空閒儲存空間分配的結構。

  • **回收** - 當已分配並正在使用的儲存空間變得可用以重用時,必須由儲存管理器回收。這包括查詢不再被引用的資料物件並回收該記憶體。

最近釋放的儲存空間返回到空閒空間列表很簡單,它提供了可以識別和回收的儲存空間。主要問題在於確定哪些元素可用於重用,因此可以恢復到空閒空間列表。

  • **壓縮和重用** - 回收的儲存空間可以直接用於重用,或者可能需要壓縮才能從小的單元生成大的空閒儲存塊。隨著計算的進行,儲存塊透過分配、回收和重用被分解成更小的單元。

空閒空間塊不斷細分為越來越小的單元。最終,儲存分配器會達到無法滿足足夠大塊大小請求的點,即使空閒空間列表包含比請求塊多得多的空間。

因此,使用壓縮將記憶體內容整理在一起,形成一個大的空閒塊。這取決於堆中活動塊是否可以移動位置,可以使用兩種壓縮方法。

  • **部分壓縮** - 如果移動活動塊的代價過高(或者活動塊無法移動),則只能壓縮空閒空間列表上的連續空閒塊。

  • **完全壓縮** - 如果活動塊可以移動,則所有活動塊都可以移動到堆的一端,在另一端留下一個連續的空閒塊。完全壓縮需要在移動活動塊時更改指向該塊的所有指標以指向新位置。

更新於:2021年10月23日

4K+ 瀏覽量

開啟您的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.