运行时存储管理在编译器设计中的作用是什么?
编译器需要为操作系统提供一块内存。编译器利用这块内存来执行编译后的程序。这块内存称为存储管理。编译器必须执行的重要任务之一是分配目标机器的资源来表示源程序正在操作的数据对象。
编译器必须决定源程序中数据对象的运行时表示。在源程序中,数据对象(例如整数和实变量)的运行时表示通常采用机器级别的等效数据对象的形式,而数组和字符串等数据结构由机器内存的几个字表示。
至于为变量的生命周期分配存储空间,有三种可能性 -
如果变量的生命周期是程序的生命周期,并且它的值的空间一旦分配,以后就不能释放。这种存储被定义为静态存储。
如果变量的生命周期是声明该变量的特定块、函数或过程,则分配给该变量的存储可以在块、函数或过程的执行结束时解除分配。这种存储被定义为动态存储。
可以为不一定与变量相关联的值分配存储空间,在程序执行中的特定点不一定对应于块的开始或过程的入口。从那时起就需要存储,直到它通过语言机制或通过程序不再可访问而被释放。
但是,这次发布的动作,这个空间只被称为runtime。这种存储被定义为全局存储。因此,在介绍结束时,它最终可以得出结论,在运行时必须处理以下问题 -
它可以管理源程序中的名称与运行时存在的数据对象之间的关系。
它可以在运行时管理数据对象的分配/解除分配和访问。
它可以控制和跟踪不同的程序及其调用。
它可以管理由语言提供的库函数。
可用于为数据对象分配存储的策略由定义编程语言中名称的范围和持续时间的规则确定。最简单的策略是静态分配,它用在像 FORTRAN 这样的语言中。
通过静态分配,可以在编译期间确定每个数据对象的运行时大小和相对位置。支持递归的语言需要一种更复杂的涉及堆栈的动态内存分配策略 - 新块或过程的入口导致堆栈上的空间分配,该空间在退出块或过程时被释放。
以上是 运行时存储管理在编译器设计中的作用是什么? 的全部内容, 来源链接: utcz.com/z/322608.html