編譯器設計中執行時儲存管理的作用是什麼?
編譯器需要一塊記憶體用於作業系統。編譯器利用這塊記憶體來執行已編譯的程式。這塊記憶體被稱為儲存管理。編譯器必須執行的一項重要任務是分配目標機器的資源來表示源程式正在操作的資料物件。
編譯器必須確定源程式中資料物件的執行時表示。在源程式中,資料物件的執行時表示(例如整數和實數變數)通常採用機器級別的等效資料物件的形式,而資料結構(例如陣列和字串)則由幾段機器記憶體表示。
就為變數的生存期分配儲存空間而言,有三種可能性:
如果變數的生存期是程式的生存期,並且一旦分配了其值的儲存空間,以後就不能釋放。這種儲存被稱為靜態儲存。
如果變數的生存期是宣告該變數的特定塊、函式或過程,則在塊、函式或過程執行結束時,可以釋放分配給該變數的儲存空間。這種儲存被稱為動態儲存。
可以在程式執行的特定點為不一定要與變數關聯的值分配儲存空間,該點不一定要對應於塊的開始或過程的入口。然後從那時起需要儲存空間,直到透過語言機制或透過程式不再可以訪問而釋放。
然而,這種釋放的移動,這個空間只被稱為執行時。這種儲存被稱為全域性儲存。因此,在介紹結束時,最終可以得出結論,在執行時必須注意以下問題:
- 它可以管理源程式中的名稱與執行時存在的資料物件之間的關係。
- 它可以管理執行時資料物件的分配/釋放和訪問。
- 它可以控制和跟蹤不同的過程及其呼叫。
- 它可以管理語言提供的庫函式。
用於為資料物件分配儲存空間的策略由定義程式設計語言中名稱的作用域和持續時間的規則確定。最簡單的策略是靜態分配,它用於FORTRAN之類的語言。
使用靜態分配,可以在編譯期間確定每個資料物件的執行時大小和相對位置。對於支援遞迴的語言,需要一種更復雜的動態記憶體分配策略(涉及堆疊),遞迴的含義是:進入新的塊或過程會導致在堆疊上分配空間,並在退出塊或過程時釋放空間。
廣告