编译原理与技术 运行环境 2021/218 《编译原理与技术》一运行环境
2021/2/8 《编译原理与技术》-运行环境 1 编译原理与技术 运行环境
运行环境 存储组织与分配 程序单元、运行时内存划分与活动记录 静态/动态存储分配 动态栈式的过程调用/返回 非局部名字的访 参数传递 a参数传递的方式及其实现 2021/2/8 《编译原理与技术》一运行环境
2021/2/8 《编译原理与技术》-运行环境 2 运行环境 存储组织与分配 程序单元、运行时内存划分与活动记录 静态/动态存储分配 动态栈式的过程调用/返回 非局部名字的访问 参数传递 参数传递的方式及其实现
存储组织与分配 程序单元 FORTRAN的子例程( subroutine) PASCAL的过程/函数( rocedure/function) C的函数 程序单元的激活(调用)与终止(返回) 程序单元的执行需要: 代码段十活动记录(程序单元运行所需的额 外信息,如参数,局部数据,返回地址等) 2021/2/8 《编译原理与技术》一运行环境 3
2021/2/8 《编译原理与技术》-运行环境 3 存储组织与分配 程序单元 -FORTRAN的子例程(subroutine) -PASCAL的过程/函数(procedure/function) -C的函数 程序单元的激活(调用)与终止(返回) 程序单元的执行需要: 代码段+活动记录(程序单元运行所需的额 外信息,如参数,局部数据,返回地址等)
运行时内存划分 代码段 大小可以静态确定 静态数据区 全局/局部静态变量 匚栈( stack 活动记录栈 堆(heap) 动态分配的数据 2021/2/8 《编译原理与技术》一运行环境 4
2021/2/8 《编译原理与技术》-运行环境 4 运行时内存划分 代码段 静态数据区 栈(stack) 堆(heap) 大小可以静态确定 全局/局部静态变量 活动记录栈 动态分配的数据
活动记录 活动记录一AR( Activation record 是一连续存储区域,用于管理与存放和程序 单元执行相关的重要信 AR中的内容 一临时区域。用以保存临时计算结果 局部数据区。源程序中程序单元声明的局 部变量对应在此区域。 机器状态保存区。存有机器的寄存器,程 序指令计数器ip(返回地址)等。2 2021/2/8 《编译原理与技术》一运行环境 5
2021/2/8 《编译原理与技术》-运行环境 5 活动记录 活动记录-AR (Activation Record) 是一连续存储区域,用于管理与存放和程序 单元执行相关的重要信息。 AR中的内容 - 临时区域。用以保存临时计算结果 - 局部数据区。源程序中程序单元声明的局 部变量对应在此区域。 - 机器状态保存区。存有机器的寄存器,程 序指令计数器 ip(返回地址)等
活动记录 AR中的内容 访问链(静态链)。当前程序单元可以访 问的(静态程序中)外围程序单元的活动记 录链 控制链(动态链)。程序单元的活动记录 按它们的生成(或调用)次序串成链 实在参数 返回值 2021/2/8 《编译原理与技术》一运行环境 6
2021/2/8 《编译原理与技术》-运行环境 6 活动记录 AR中的内容 - 访问链(静态链)。当前程序单元可以访 问的(静态程序中)外围程序单元的活动记 录链。 - 控制链(动态链)。程序单元的活动记录 按它们的生成(或调用)次序串成链。 - 实在参数 - 返回值
活动记录的内容 返回值( return value) 实在参数( actual parameter) 控制链( control link) 可选的访问链( optional access/ static link) 机器状态( saved machine status) 局部数据( local data) 临时区( temporaries) 2021/2/8 《编译原理与技术》一运行环境 7
2021/2/8 《编译原理与技术》-运行环境 7 活动记录的内容 返回值(return value) 实在参数(actual parameter) 控制链(control link) 可选的访问链(optional access/static link) 机器状态(saved machine status) 局部数据(local data) 临时区(temporaries)
活动记录内容的存取 返回值 实在参数 控制链(odbp) 可选的访问链 AR的基地址D,机器状态 局部数据 临时区 2021/2/8 《编译原理与技术》一运行环境 8
2021/2/8 《编译原理与技术》-运行环境 8 活动记录内容的存取 返回值 实在参数 控制链 (old bp) 可选的访问链 机器状态 局部数据 临时区 AR的基地址bp
活动记录内容的存取 返回值 地址: 实在参数 bp+d 偏移 控制链(odbp) d 可选的访问链 d1、d2谁正谁负? DP停移局部数据 机器状态 临时区 地址 bp+d2 2021/2/8 《编译原理与技术》一运行环境 9
2021/2/8 《编译原理与技术》-运行环境 9 活动记录内容的存取 返回值 实在参数 控制链(old bp) 可选的访问链 机器状态 局部数据 临时区 bp 偏 移 d1 偏移d2 地址: bp+d1 地址: bp+d2 d1、d2谁正谁负?
静态存储分配 全局变量的存储绑定、AR均在编译时确定 且在整个程序执行中保持 不支持: 1)动态数据结构 2)过程递归调用 实现静态分配的语言: (早期) FORTRAN 2021/2/8 《编译原理与技术》一运行环境 10
2021/2/8 《编译原理与技术》-运行环境 10 静态存储分配 - 全局变量的存储绑定、AR均在编译时确定 且在整个程序执行中保持。 - 不支持: 1)动态数据结构 2)过程递归调用 - 实现静态分配的语言: (早期)FORTRAN