什麼是靜態分配?


這是最簡單的分配方案,其中資料物件的分配在編譯時完成,因為每個資料項的大小都可以由編譯器確定。靜態分配的主要功能是將資料項繫結到特定的記憶體位置。靜態記憶體分配過程包括確定指令和資料空間的大小。

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

名稱與分配的儲存量之間的繫結在執行時不會更改。因此,這種分配的名稱是靜態分配。在靜態分配中,編譯器可以決定每個資料物件所需的儲存量。因此,編譯器很容易找到這些資料在啟用記錄中的地址。

在編譯時,編譯器可以填充目的碼可以找到其操作資料的地址。

呼叫語句的實現

實現靜態分配所需的程式碼如下:

MOV #here +20, callee.static_area /*儲存返回地址*/

GOTO callee.code_area /*將控制轉移到被呼叫過程的目的碼*/

其中

callee.static_area — 啟用記錄的地址。

callee.code_area — 被呼叫過程的第一個指令的地址。

#here +20 — 字面返回地址,它是 GOTO 後面指令的地址。

返回語句的實現

從過程 callee 返回的實現方式為:

GOTO * callee.static_area

這將控制轉移到儲存在啟用記錄開頭的地址。

動作語句的實現

ACTION 指令用於實現動作語句。

停止語句的實現

HALT 語句是將控制返回給作業系統的最終指令。

優點

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

缺點

  • 與遞迴子程式不相容。
  • 無法使用大小必須在執行時確定的變數。
  • 如果在編譯時知道資料物件的大小,則可以進行靜態分配。
  • 不能動態建立資料結構,這意味著靜態分配無法管理執行時的記憶體分配。


更新於:2021年11月8日

6000+ 次瀏覽

啟動你的職業生涯

透過完成課程獲得認證

開始學習
廣告