文档介绍:运行时存储空间的组织和管理
运行时的程序
过程的活动
过程的一次执行称为过程的一次活动
活动记录
过程的活动需要可执行代码和存放所需信息的存储空间,后者称为活动记录
本章内容
影响存储分配策略的语言特征
活动记录中各种数据域的安排(局部)
各种存储分配策略(全局)
静态分配、栈式分配、堆式分配
非局部数据访问的实现方法
各种参数传递方式及其实现
符号表管理
影响存储分配策略的语言特征
过程能否递归
当控制从过程的活动返回时,局部变量的值是否要保留
过程能否访问非局部变量
过程调用的参数传递方式
过程能否作为参数被传递
过程能否作为结果值传递
存储块能否在程序控制下动态地分配
存储块是否必须显式地释放
局部存储分配策略
过程
过程定义
过程声明:过程名+过程体
过程调用
执行被调用过程的过程体
形式参数
过程定义中用于在主调和被调间传递数据的标识符
实在参数
过程调用时用于在主调和被调间传递数据的变元
活动的生存期
程序执行期间的连续的步序列(过程执行的第一到最后一步)
名字的作用域和绑定
名字的作用域
一个声明起作用的那部分程序称为该声明的作用域。
即使一个名字在程序中只声明一次,该名字在程序运行时也可能表示不同的数据对象(即保存值的存储单元)。
符号表可用来寻找对一个名字的出现起作用的声明
名字的绑定
从名字到值的两步映射。
环境把名字映射到左值,而状态把左值映射到右值。
赋值改变状态,但不改变环境。
如果环境将名字x映射到存储单元s,我们就说x被绑定到s。
名字的绑定
静态概念和动态概念的对应
活动记录
过程一次执行所需的信息用一块连续的存储区来管理,称为活动记录。
一般的活动记录的布局:
指向调用者的
活动记录
用来访问存于其它活动记录中的非局部数据
局部数据的安排
字节是可编址内存的最小单位。
变量所需的存储空间可以根据其类型而静态确定。
一个过程所声明的局部变量,按这些变量声明时出现的次序,在局部数据域中依次分配空间。
局部数据的地址可以用相对于某个位置的地址来表示。
数据对象的存储安排还有一个对齐问题。
整数必须放在内存中特定的位置,如被2、4、8整除的地址