第节楼式分 语言特点:允许递归,允许动态数组, 允许过程嵌套定义
第三节 栈式分配 语言特点:允许递归,允许动态数组, 允许过程嵌套定义
只含半静态变量的栈式分配 1.特点: 仅允许递归调用 变量及活动记录长度可静态确定 一个单元可多次激活而有多个实例, 每个活动记录是在单元每次激活时 动态建立并与代码段建立绑定关系 的
一. 只含半静态变量的栈式分配 1. 特点: •仅允许递归调用 •变量及活动记录长度可静态确定 •一个单元可多次激活而有多个实例, 每个活动记录是在单元每次激活时 动态建立并与代码段建立绑定关系 的
2处理方法 (1)设置当前栈指针 current,表示当前活动 记录的开始位置 (2)指针fre表示数据存储器下一个可用单元 (3)变量绑定于它在活动记录中的常数位移i, 变量通过 current变址访问 (4)A调用B时,在A活动记录的栈顶之上建 立起绑定于B的当前实例的活动记录 (5)从B返回时,释放其活动记录
2. 处理方法 (1)设置当前栈指针current,表示当前活动 记录的开始位置 (2)指针free表示数据存储器下一个可用单元 (3)变量绑定于它在活动记录中的常数位移i, 变量通过current变址访问 (4)A调用B时,在A活动记录的栈顶之上建 立起绑定于B的当前实例的活动记录 (5)从B返回时,释放其活动记录
3.动态连接和动态链 动态连接:A调用B时,B的活动记 录中保存的A的活动记录地址 动态链:由动态连接组成的一个调 用链
3. 动态连接和动态链 •动态连接:A调用B时,B的活动记 录中保存的A的活动记录地址 •动态链:由动态连接组成的一个调 用链
acall e: e call ff call g call f. A E F G
A E F G F A call E; E call F; F call G; G call F; ... ... ... ...
4. CALL P的处理 (1)保存返回地址 DI free lp+20 (2)保存主调过程的 current D Ifree +4]:=current (3)建立P的 current current free (4)调整fe free -free +L (5)转子 p:=P的代码段首地址
4. CALL P 的处理 (1)保存返回地址 D [ free ] := ip + 20 (2)保存主调过程的current D [free + 4] := current (3)建立P的current current := free (4)调整free free := free + L (5)转子 ip := P的代码段首地址
过程A中调用了P current 返回地址 动态连接 A的活动记录 free 返回地址 动态连接 即将建立的 P的活动记录
返回地址 动态连接 返回地址 动态连接 A的活动记录 即将建立的 P的活动记录 current free 过程A中调用了P
进入过程P以后 返回地址 动态链 A的活动记录 current 返回地址 动态链 P的活动记录 fr ee
返回地址 动态链 返回地址 动态链 A的活动记录 P的活动记录 current free 进入过程P以后
5 RETURN语句的处理 (1)恢复free fre ee current (2)恢复主调过程的 current current: =D[current +41 (3)返回 ip: D [freel
5. RETURN语句的处理 (1)恢复free free := current (2)恢复主调过程的current current := D[current + 4] (3)返回 ip := D [free]
三.半静态变量的栈式分配 1.活动记录内容 返回地址 动态链 静态链 保护区 参数单元 局部变量 临时变量 数组存储区 其中,局部变量中包括数组的描述符
二. 半静态变量的栈式分配 1. 活动记录内容 返回地址 动态链 静态链 保护区 参数单元 局部变量 临时变量 数组存储区 其中,局部变量中包括数组的描述符