第10章_目标程序运行时的存储组织(2学时).ppt_第1页
第10章_目标程序运行时的存储组织(2学时).ppt_第2页
第10章_目标程序运行时的存储组织(2学时).ppt_第3页
第10章_目标程序运行时的存储组织(2学时).ppt_第4页
第10章_目标程序运行时的存储组织(2学时).ppt_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第10章 目标程序运行时的存储组织 n数据空间的三种使用方法和管理方法 静态存储分配 动态存储分配 栈式动态存储分配 堆式动态存储分配 n栈式存储分配的实现 简单栈式存储分配的实现 嵌套过程语言的栈式实现 分程序结构的存储管理 n参数传递(传值、传址、过程参数) n过程调用、过程进入和过程返回 10.1 数据空间的使用和管理方法 代码生成之前,编译程序必须设计目标程序的 运行环境和数据空间的分配。 目标代码区 静态数据区 stack he ap 数据区 数据空间存储分配: 静态存储分配 动态存储分配 栈式 堆式 一、静态存储分配 如果编译时就能确定目标程序运行中所需的全部 数据空间大小,那么在编译时就安排好目标程 序运行时的全部数据,并确定每个数据对象的 存储位置。例:fortran语言 特点: 1) 各段数据对象名的作用域在各段中,同一名字 在不同的程序段表示不同的存储单元,不会在 不同的程序段之间相互引用和赋值 2) 各数据名所需存储空间大小在编译时就能确定 3) 所有数据名的性质是完全确定的 二、栈式动态存储分配 将整个程序的数据空间设计成一个“栈”。 每调用一个过程,该过程所需的数据空间分 配在栈顶 该过程一结束就释放这部分空间 过程所需的数据空间: 1) 存放本过程这次活动中的数据对象。 如:局部变量、参数、临时变量等 1) 用于管理过程活动的记录信息。 如:静态链、动态链、返回地址等 三、堆式动态存储分配 采用堆式动态存储分配的情况: 1) 若一个程序设计语言允许用户在程序运行 过程中动态地申请数据空间和退还数据空间 。 如:c+中的new和delete 2) 不仅有过程还有进程的程序结构,即空间分 配未必服从“先申请后释放”原则。 10.2 栈式存储分配的实现 程序运行时,每进入一个过程,就在栈顶为其分配所 需的数据空间;过程结束就释放该过程的数据空间。 一个过程的一次执行所需要的信息,使用一段连续的 存储区来管理,这个区 (块)叫做一个过程活动记 录ar(activation record)或frame(帧)。 一般这个区要记录: 1) 临时工作单元:存放中间结果的临时单元。 2) 局部变量 3) 机器状态信息:保存运行过程前的状态(寄存器 值,程序计数器,) 4) 存取链:可选, 用于非局部量的引用。 5) 控制链:可选, 指向调用者的活动记录,释放栈 。 6) 实参 7) 返回地址 一、简单的栈式分配方案 n前提:没有份程序结构,过程定义不嵌套,但允许 过程的递归调用 n实例:p234 图10.7 n指针: sp:指向现行过程活动记录的起点 top:指向栈顶 n注意: 若含有可变数组,过程活动记录的内容增加一项 “局部数组的内情向量” 控制链(老sp):指向调用该过程的那个过程 最新活动记录的基地址。 二、嵌套过程语言的栈式实现 n前提:没有分程序结构,允许过程的嵌套定 义,允许过程的递归调用。 n主要特点: (语言)一个过程可以引用包围它的任一 外层过程所定义的标识符(如变量,数组 或过程等)。 (实现)一个过程可以引用它的任一外层 过程的最新活动记录中的某些数据。 n实例:p236 图10.11 n关键技术: 解决对非局部量的引用(存取)。设法跟踪每 个外层过程的最新活动记录ar的位置。 n跟踪办法: 1) 存取链(如pl/0的sl):在过程活动记 录中增加“”,指向定义该过程的直接外过 程运行时最新数据段的基地址 2) display表:每进入一个过程后,建立活 动记录的同时建立一张“嵌套层次表 display” display表举例:p238 图10.15 图10.16 三、分程序结构的存储管理 n前提:允许分程序结构,允许过程的嵌套定 义,允许过程的递归调用。 n实例:p240 图10.19 n分程序结构中一个声明的作用域: 最近嵌套原则 n程序名字的存储分配:p241 图10.20 n运行时数据空间的变化情况: 参见:p241 图10.21和p243 图10.23 10.3 参数传递 把实参传递给形参的方法: 传值(值调用) 传址(地址引用) 传名(名字调用) 宏扩展 一、传值 形参被作为函数的局部变量,在被调过程的活 动记录中开辟了形参的存储单元。 调用过程时,把实参的值赋值给对应形参的存 储单元。 对形式参数的任何运算不影响实参的值。 例如:void swap(int x,int y) int t; t:=x; x:=y; y:=t; 二、传址 形参用于存放实参对应的地址。 调用过程时,把实参的地址赋值给对应形参的 存储单元。 对

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论