编译器设计中的存储分配技术是什么?
有多种存储分配技术如下 -
静态分配
这是最简单的分配方案,其中数据对象的分配在编译时完成,因为每个数据项的大小可以由编译器确定。
语言中不允许递归子程序和长度可调的数组。在静态分配中,编译器可以决定每个数据对象所需的存储量。因此,编译器很容易识别激活记录中这些数据的地址。
FORTRAN 使用这种存储分配策略。
好处
它很容易实现。
它允许在编译期间进行类型检查。
它消除了内存不足的可能性。
缺点
它与递归子程序不兼容。
不能使用大小必须在运行时确定的变量。
如果数据对象的大小称为编译时,就可以完成静态分配。
动态分配(堆栈分配)
堆栈分配是一种运行时存储管理技术。激活记录分别在激活开始和结束时被推送和弹出。
每次调用过程中的本地存储都包含在该调用的激活记录中。因此,本地人在每次激活时都绑定到新存储,因为在进行调用时会将新的激活记录推入堆栈。
可以在运行时确定变量的大小,因此局部变量在各种激活期间可以具有不同的存储位置和不同的值。
它允许递归子程序。
ALGOL 语言使用这种策略。
过程的每次执行都会生成一个激活记录,其中包含过程的本地数据、实参、返回值、返回地址等信息。该过程的激活记录被保存到堆栈中。
如果过程 A 调用 B,然后 B 调用 C,则堆栈分配将是
好处
它支持递归。
它动态地为数据项创建数据结构。
好处
内存寻址可以使用指针和索引寄存器来完成。
堆存储分配
它支持在非嵌套设计中分配内存。存储可以从称为堆的区域任意分配和释放。
堆分配有助于执行大小随程序运行而变化的数据。
堆被维护为一个称为空闲空间列表的空闲空间列表。
好处
一个大的存储块可以在运行时被分割成更小的块。
缺点
它产生了碎片化问题。
以上是 编译器设计中的存储分配技术是什么? 的全部内容, 来源链接: utcz.com/z/363461.html