編譯器設計中儲存分配的技術是什麼?


儲存分配技術有多種,如下所示:

靜態分配

這是最簡單的分配方案,其中資料物件的分配在編譯時完成,因為每個資料項的大小都可以由編譯器確定。

遞迴子程式和可調長度陣列在語言中是不允許的。在靜態分配中,編譯器可以決定每個資料物件所需的儲存量。因此,編譯器很容易識別啟用記錄中這些資料的地址。

FORTRAN 使用這種儲存分配策略。

優點

  • 易於實現。
  • 允許在編譯期間進行型別檢查。
  • 消除了記憶體不足的可能性。

缺點

  • 與遞迴子程式不相容。
  • 無法使用大小必須在執行時確定的變數。
  • 如果資料物件的大小在編譯時已知,則可以完成靜態分配。

動態分配(棧分配)

棧分配是一種執行時儲存管理技術。啟用記錄分別在啟用開始和結束時被壓入和彈出。

每個過程呼叫中的區域性變數的儲存都包含在該呼叫的啟用記錄中。因此,區域性變數在每次啟用中都繫結到新的儲存,因為在進行呼叫時,一個新的啟用記錄會被壓入棧中。

它可以在執行時確定變數的大小,因此區域性變數可以在不同的啟用期間具有不同的儲存位置和不同的值。

它允許遞迴子程式。

ALGOL 語言使用此策略。

在每次執行過程中,都會生成一個啟用記錄,其中包含諸如區域性資料、實際引數、返回值、過程的返回地址等資訊。該過程的啟用記錄被儲存到棧中。

如果過程 A 呼叫 B,然後 B 呼叫 C,則棧分配將是

優點

  • 它支援遞迴。
  • 它為資料項動態建立資料結構。

優點

  • 可以使用指標和索引暫存器進行記憶體定址。

堆儲存分配

它能夠在非巢狀設計中分配記憶體。儲存可以從稱為堆的區域中任意分配和釋放。

堆分配 有助於執行大小在程式執行時變化的資料。

堆維護為一個稱為空閒空間列表的空閒空間列表。

優點

一個大的儲存塊可以在執行時被劃分為較小的塊。

缺點

它會產生碎片問題。

更新於: 2023-10-31

52K+ 次檢視

啟動你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.