编译器设计中的存储分配技术是什么?

有多种存储分配技术如下 -

静态分配

这是最简单的分配方案,其中数据对象的分配在编译时完成,因为每个数据项的大小可以由编译器确定。

语言中不允许递归子程序和长度可调的数组。在静态分配中,编译器可以决定每个数据对象所需的存储量。因此,编译器很容易识别激活记录中这些数据的地址。

FORTRAN 使用这种存储分配策略。

好处

  • 它很容易实现。

  • 它允许在编译期间进行类型检查。

  • 它消除了内存不足的可能性。

缺点

  • 它与递归子程序不兼容。

  • 不能使用大小必须在运行时确定的变量。

  • 如果数据对象的大小称为编译时,就可以完成静态分配。

动态分配(堆栈分配)

堆栈分配是一种运行时存储管理技术。激活记录分别在激活开始和结束时被推送和弹出。

每次调用过程中的本地存储都包含在该调用的激活记录中。因此,本地人在每次激活时都绑定到新存储,因为在进行调用时会将新的激活记录推入堆栈。

可以在运行时确定变量的大小,因此局部变量在各种激活期间可以具有不同的存储位置和不同的值。

它允许递归子程序。

ALGOL 语言使用这种策略。

过程的每次执行都会生成一个激活记录,其中包含过程的本地数据、实参、返回值、返回地址等信息。该过程的激活记录被保存到堆栈中。

如果过程 A 调用 B,然后 B 调用 C,则堆栈分配将是

好处

  • 它支持递归。

  • 它动态地为数据项创建数据结构。

好处

  • 内存寻址可以使用指针和索引寄存器来完成。

堆存储分配

它支持在非嵌套设计中分配内存。存储可以从称为堆的区域任意分配和释放。

堆分配有助于执行大小随程序运行而变化的数据。

堆被维护为一个称为空闲空间列表的空闲空间列表。

好处

一个大的存储块可以在运行时被分割成更小的块。

缺点

它产生了碎片化问题。

以上是 编译器设计中的存储分配技术是什么? 的全部内容, 来源链接: utcz.com/z/363461.html

回到顶部