程式語言設計中哪些問題會影響儲存管理?
程式語言設計中存在各種問題,這些問題會影響執行程式對儲存空間的使用。執行目標程式需要為多個元素分配儲存空間。儲存空間主要用於目標程式、使用者定義的資料結構、變數和常量。還需要儲存空間來存放過程連結資訊、表示式求值所需的臨時變數以及引數傳遞。
各種程式語言為目標程式安排空間的方式如下:
靜態儲存分配:這是最簡單的分配方案,其中資料物件的分配在編譯時完成,因為編譯器可以確定每個資料項的大小。如果編譯器可以確定每個資料項的大小,並且不允許遞迴過程呼叫,則可以在編譯時靜態地為所有程式和資料分配儲存空間。這種方案易於實現,不需要執行時支援。
動態儲存分配:如果程式語言允許遞迴過程或大小可調的資料結構,則需要動態儲存分配。
動態儲存分配有兩種型別:
- 棧分配:它對於處理遞迴過程非常有用。每次呼叫過程時,它都會將其資料放在棧頂,當過程返回時,它會將資料從棧中彈出。執行時使用某種型別的棧。
優點
- 支援遞迴。
- 動態建立資料項的資料結構。
缺點
- 記憶體定址可以使用指標和索引暫存器。因此,這種分配方式比靜態分配慢。
堆分配:它用於實現其大小在程式執行期間變化的資料。它涉及獲取一大塊記憶體並將其劃分為可變長度的塊,一些用於資料,一些空閒。建立資料項時,它可以找到一塊空閒的記憶體。當不再需要資料時,其塊將變為空閒。
堆管理使用兩種方法:
垃圾收集方法
當所有訪問物件路徑都被銷燬,但資料物件仍然存在時,此類物件被稱為垃圾。垃圾收集是一種用於重用該物件空間的技術。
引用計數
透過引用計數,嘗試在堆儲存的每個元素無法再訪問後立即回收它。
廣告