什麼是靜態分配?
這是最簡單的分配方案,其中資料物件的分配在編譯時完成,因為每個資料項的大小都可以由編譯器確定。靜態分配的主要功能是將資料項繫結到特定的記憶體位置。靜態記憶體分配過程包括確定指令和資料空間的大小。
遞迴子程式和可調整長度的陣列在語言中是不允許的。在靜態分配中,編譯器可以決定每個資料物件所需的儲存量。因此,編譯器很容易找到這些資料在啟用記錄中的地址。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 語句是將控制返回給作業系統的最終指令。
優點
- 易於實現。
- 允許在編譯期間進行型別檢查。
- 消除了記憶體不足的可能性。
缺點
- 與遞迴子程式不相容。
- 無法使用大小必須在執行時確定的變數。
- 如果在編譯時知道資料物件的大小,則可以進行靜態分配。
- 不能動態建立資料結構,這意味著靜態分配無法管理執行時的記憶體分配。
廣告