编泽原理 第九章程序运行期间的存储空间组织 2005/6112
编译原理 2005/6/12 第九章 程序运行期间的存储空间组织
编译原理 本节内容与要点 墨运行时存储空间的划分 活动记录概念 存储空间分配策略 1、静态存储分配 2、动态存储分配 简单栈式存储分配 嵌套过程语言的栈式分配 典型范例解析 第2觉
编译原理 第2页 本节内容与要点 运行时存储空间的划分 活动记录概念 存储空间分配策略 1、静态存储分配 2、动态存储分配 简单栈式存储分配 嵌套过程语言的栈式分配 典型范例解析
编泽原理 运行时存储空间的划分 编译程序为了使它编译后得到的目标程序能够运行, 要从操作系统中获得一块存储空间。 对这块提供运行的空间应该进行划分以便存放:生成 的标代码、数据对象和跟踪过程活动的控制栈。目 标代码的大小在编译时可以确定,所以编译程序可以 把它放在一个静态确定的区域。 慧有一些数据对象的大小在编译时也能确定,因此它们 也可以放在静态确定的区域。 第3页
编译原理 第3页 运行时存储空间的划分 编译程序为了使它编译后得到的目标程序能够运行, 要从操作系统中获得一块存储空间。 对这块提供运行的空间应该进行划分以便存放:生成 的目标代码、数据对象和跟踪过程活动的控制栈。目 标代码的大小在编译时可以确定,所以编译程序可以 把它放在一个静态确定的区域。 有一些数据对象的大小在编译时也能确定,因此它们 也可以放在静态确定的区域
编译原理 返回 运行时存储空间的划分(续) 目标代码 静态数据 栈 ↓ 堆 第4负
编译原理 第4页 运行时存储空间的划分(续) 目 标 代 码 静 态 数 据 栈 ↓ ↑ 堆 返回
编泽原理 活动记录 为了管理过程在一次执行中所需要的信息, 使用一个连续的存储块,这样的一个连续存储 块称为活动记录(Activation Record)。 当过程调用时,产生一个过程的新的活动, 用一个活动记录表示该活动的相关信息,并将 其压入栈。 第5列
编译原理 第5页 活动记录 为了管理过程在一次执行中所需要的信息, 使用一个连续的存储块,这样的一个连续存储 块称为活动记录(Activation Record)。 当过程调用时,产生一个过程的新的活动, 用一个活动记录表示该活动的相关信息,并将 其压入栈
编译原理 当过程返回 (活动结束)时,当前活动记录 般包含如下内容: 连接数据 1.返回地址 2动态链:指向调用该过程前的最新活动记录 地址的指针。运行时,使运行栈上各数据区 按动态建立的次序结成链。链头为栈顶起始 位置。 3.静态链:指向静态直接外层最新活动记录地 址的指针,用来访问非局部数据。 第6觉
编译原理 第6页 当过程返回(活动结束)时,当前活动记录 一般包含如下内容: 连接数据 1.返回地址 2.动态链:指向调用该过程前的最新活动记录 地址的指针。运行时,使运行栈上各数据区 按动态建立的次序结成链。链头为栈顶起始 位置。 3.静态链:指向静态直接外层最新活动记录地 址的指针,用来访问非局部数据
编泽原理 形式单元:存放相应的实在参数的地址或值。 局部数据区:局部变量、内情向量、临时工作单 元(如存放对表达式求值的结果)。 指针SP指向现行过程(即最新进入工作的那个过 程)的活动记录在栈里的起始位置。 第7负
编译原理 第7页 形式单元:存放相应的实在参数的地址或值。 局部数据区:局部变量、内情向量、临时工作单 元(如存放对表达式求值的结果)。 指针SP指向现行过程(即最新进入工作的那个过 程)的活动记录在栈里的起始位置
编译原理 返回 活动记录结构图 TOP 临时单元 内情向量 局部变量 形式单元 静态链 动态连 连接数据 SP 返回地址 第8页
编译原理 第8页 活动记录结构图 临 时 单 元 内 情 向 量 局 部 变 量 形 式单 元 静 态 链 动 态 连 返 回 地 址 TOP SP 连接数据 返回
编泽原理 返回 存储分配策略 静态分配策略在编译时对所有数据对象分配 固定的存储单元,且在运行时始终保持不变。 栈式动态分配策略在运行时把存储器作为一 个栈进行管理,运行时,每当调用一个过程, 它所需要的存储空间就动态地分配于栈顶, 一旦退出,它所占空间就予以释放。 号堆式动态分配策略在运行时把存储器组织成 堆结构,以便用户关于存储空间的申请与归 还(回收),凡申请者从堆中分给一块,凡 释放者退回给堆。 第第9页
编译原理 第9页 存储分配策略 静态分配策略在编译时对所有数据对象分配 固定的存储单元,且在运行时始终保持不变。 栈式动态分配策略在运行时把存储器作为一 个栈进行管理,运行时,每当调用一个过程, 它所需要的存储空间就动态地分配于栈顶, 一旦退出,它所占空间就予以释放。 堆式动态分配策略在运行时把存储器组织成 堆结构,以便用户关于存储空间的申请与归 还(回收),凡申请者从堆中分给一块,凡 释放者退回给堆。 返回
编泽原理 静态分配策略 适用范围和特点: 1、程序语言不允许递归过程; 2、不许含可变体积的数据项目或待定性质的 名字; 3、在编译时就能够确定一个程序在运行时所 需的存贮空间大小,能够安排好目标程序运 行的全部数据空间,并能确定每个数据项的 单元地址。 第0贡
编译原理 第10页 一、静态分配策略 适用范围和特点: 1、程序语言不允许递归过程; 2、不许含可变体积的数据项目或待定性质的 名字; 3、在编译时就能够确定一个程序在运行时所 需的存贮空间大小,能够安排好目标程序运 行的全部数据空间,并能确定每个数据项的 单元地址