活动记录包括(如图所示) (1)连接数据 a)老的SP。 每个活动记录,有一个基址指针称为SP。为了撤销本活 动记录时能指出上一个调用者的活动记录就应保存调用者的 SP称为老的SP。而老的栈顶不必保存,因为老的栈顶为现 SP1(设SP占一个存储单元) b)返回地址 返回地址是指子程序完成后的返回地址(对于函数还要 返回其函数值)。 (2)程序状态字 为保存调用者的机器信息,如程序计数器、标志寄存器 和寄存器的值,在返回时,预以恢复。 (3)参数个数 (4)形式单元 存放实在参数的值或地址
活动记录包括(如图所示): (1) 连接数据 a) 老的SP。 每个活动记录,有一个基址指针称为SP。为了撤销本活 动记录时能指出上一个调用者的活动记录就应保存调用者的 SP称为老的SP。而老的栈顶不必保存,因为老的栈顶为现 SP-1(设SP占一个存储单元) b) 返回地址 返回地址是指子程序完成后的返回地址(对于函数还要 返回其函数值)。 (2) 程序状态字 为保存调用者的机器信息,如程序计数器、标志寄存器 和寄存器的值,在返回时,预以恢复。 (3) 参数个数 (4)形式单元 存放实在参数的值或地址
(5)局部数据 局部数据包括:局部变量、静态数组的数据区、动态数组 的内情向量和临时工作单元。 TOP-- 格时工作单元 动老数组的内情向量 静杏数狽的数据区 后邻变量 形式单元 多数个数 2 返回地址 者sP 图74活动记录示意图
(5) 局部数据 局部数据包括:局部变量、静态数组的数据区、动态数组 的内情向量和临时工作单元
例:设有程序结构如下所示 program main 全局变量或数组说明; proc R; end r: proc end Q 在采用栈式动态分配时,因每进入一个过程就为该过程 或函数分配存储空间。则图(a)表示主程序中调用了R;在 R中又调用了Q的存储结构。图(b)表示在Q中又调用了Q 的存储结构。图(c)表示在Q退出,又调用了R的存储结构。 图(d)表示在R退出的存储结构。图(e)表示在Q退出的 存储结构。图(f)表示在R退出的存储结构
例:设有程序结构如下所示: program main; 全局变量或数组说明; proc R; … end R; proc Q; … end Q; 在采用栈式动态分配时,因每进入一个过程就为该过程 或函数分配存储空间。则图(a)表示主程序中调用了R;在 R中又调用了Q的存储结构。图(b)表示在Q中又调用了Q 的存储结构。图(c)表示在Q退出,又调用了R的存储结构。 图(d)表示在R退出的存储结构。图(e)表示在Q退出的 存储结构。图(f)表示在R退出的存储结构
TOP TOP-e Q的活动 R的活动 记录 记录 TOP- Q的活动 Q的活动 Q的活动 记录 记录 记录 R的活动 R的活动 R的活动 记录 记录 记录 士框啥全 士序全 士框序全 数据区 后数区 后数据区 Q的活动 记录 R的活动 R的活动 记录 记录 士序全 主序全rOp 士序全 后数据区 所数据区 后数据区 f 图75栈存储分配示意图
经过讨论了栈的存储分配,还要考虑过程式或函数调用 和返回需完成的工作。前面第六章说过过程调用的四元式序 列是: par par par par call Pn
经过讨论了栈的存储分配,还要考虑过程式或函数调用 和返回需完成的工作。前面第六章说过过程调用的四元式序 列是: par T1 par T2 par T3 … par Tn call P,n