1. 程式人生 > >5.3 記憶體分配與垃圾回收

5.3 記憶體分配與垃圾回收

5.3 記憶體分配與垃圾回收
   在5.4部分中,我們將展示如何用一個暫存器機器實現一個SCHEME直譯器。
為了簡化討論,我們假定我們的暫存器機器有一個列表結構的記憶體,而且
操作列表結構的基本操作是原生的。當我們聚焦於在一個SCHEME直譯器中的控制機制時,
假定如此的記憶體的存在是一個有用的抽象。但這並不影響到一個實際計算機的實際的
原生的資料操作的現實的視角。為了獲得一個更完整的LISP系統如何工作的圖景,
我們必須調查研究列表結構如何以一種與傳統的計算機記憶體相容的方式被表示出來。

在實現列表結構的過程中,這有兩點注意事項。一是純粹的表示問題:在僅使用傳統的
計算機的記憶體的儲存與地址引用的能力的情況下,如何表示LISP鍵值對的盒子與指標
的結構。第二個問題是為了計算的利益,關注記憶體的管理。LISP系統的操作關鍵依賴於
持續建立新的資料物件的能力。這包括了被執行的LISP程式顯式建立的物件,也有
直譯器本身建立的結構,例如環境變數和實際引數的列表。儘管新的資料物件的常規建立
在擁有無限量的快速地址引用的記憶體的計算機下是沒有問題的,計算機記憶體僅在有限的大小
內是可用的(更多的只能是遺憾) 。LISP系統提供了一個自動記憶體分配的方法來支援
有無限記憶體的假象。當一個數據物件不再需要時,分配給它的記憶體能自動地回收,並且用於
建立新的資料物件。為了提供這樣的記憶體儲存分配機制,有一些技術可用。在這部分我們討論的
方法叫做垃圾回收。