# 5.3储存分配和垃圾回收

> 译者： [https://sicp.comp.nus.edu.sg/chapters/106](https://sicp.comp.nus.edu.sg/chapters/106)



在 [5.4](109) 部分中，我们将展示如何将JavaScript评估程序实现为注册机。 为了简化讨论，我们将假定我们的寄存器机可以配备_列表结构的存储器_，其中操纵列表结构的数据的基本操作是原始的。 当人们专注于JavaScript解释器中的控制机制时，假定这种内存的存在是一种有用的抽象，但是这并不能反映当代计算机实际原始数据操作的真实情况。 为了更全面地了解JavaScript系统的运行方式，我们必须研究如何以与常规计算机内存兼容的方式表示列表结构。

实现列表结构有两个注意事项。 第一个纯粹是表示问题：如何仅使用典型计算机内存的存储和寻址功能来表示JavaScript对的&lt;quote&gt;盒形指针&lt;/quote&gt;结构。 第二个问题涉及随着计算的进行对存储器的管理。 JavaScript系统的操作主要取决于连续创建新数据对象的能力。 这些对象包括由要解释的JavaScript函数显式创建的对象，以及由解释器本身创建的结构，例如环境和参数列表。 尽管不断创建新的数据对象在具有无限数量的快速可寻址内存的计算机上不会造成任何问题，但是计算机内存只能以有限的大小使用（更可惜）。 因此，JavaScript系统提供了_自动存储分配_工具，以支持无限内存的错觉。 当不再需要数据对象时，分配给它的内存将自动回收并用于构造新的数据对象。 有多种技术可以提供这种自动存储分配。 我们将在本节中讨论的方法称为_垃圾回收_。

