- 5
- 0
- 约8.4千字
- 约 34页
- 2020-05-13 发布于四川
- 举报
第10章 目标程序运行时的组织 教学要求:本章介绍目标程序运行时的存储组织方式,包括静态存储分配和动态存储分配。 要求掌握各种存储组织形式的基本方法。 教学重点:静态分配策略和动态分配策略基本思想,嵌套过程语言栈式分配,活动记录、运行时栈的组织。 10.1 概述 2、存储分配策略: (1)静态存储分配——在编译阶段对源程序中的量分配固定单元,运行时始终不变。 注:1、程序结构特点:不允许递归调用,而且不含有可变数组。(如FORTRAN语言)。 2、基本策略:在编译时,根据各类数据所需的存储空间大小以及存储方式规定,在符号表中建立“名字-地址”对应关系,然后根据这些对应关系进行变量名的地址分配。 10.2 栈式存储分配的实现 一、简单的栈式存储分配的实现 程序结构特点:没有分程序结构,过程定义不嵌套,过程可递归调用。 简单栈式分配方案:把存储区组织成一个栈,运行时每进入一个过程,就把它的活动记录压入栈,形成过程工作时的临时数据区,该过程结束时取消该数据区。 二、嵌套过程语言的栈式分配的实现 1、程序结构特点:语言的定义允许嵌套,一个过程可以引用包围它的任一外层过程所定义的标识符(如变量,数组或过程等)(如PASCAL语言) 。 如何才能引用外层数据? 2、关键:设法跟踪每个外层过程的最新活动记录AR的位置。 跟踪办法: (1) 用静态链。 (2) 用DISPLAY表。 (1) 用静态链 在过程活动记录中增设静态链,指向包含该过程的直接外层过程的最新活动记录的起始位置。见P223-224 2、用Display表 Display表---嵌套层次显示表 当前激活过程的层次为K,它的Display表含有K+1个单元,依次存放着现行层,直接外层…直至最外层的每一过程的最新活动记录的基地址。 说明:1、由于过程的层数可以静态确定,因此每个过程的Display表的体积在编译时即可以确定。 2、某过程p是在层次为i的过程q内定义的,并且q是包围p的直接外层,那么p的过程层数为i+1。 用Display表的方案 (1)主程序---(2)P---(3)Q---(4)R 用Display表的方案 (1)主程序---(2)P---(3)Q---(4)R DISPLAY表的维护和建立 为便于组织存储区,将display作为活动记录的一部分,其相对地址在编译时是完全可以确定的。 假设过程P1可调用P2,为了能在P2中建立P2的display,在P1调用P2时设法把P1的display地址作为连接数据之一(全局display地址)传送给P2,因此连接数据包括: 老SP值(动态链) 返回地址 全局display地址 …… d DISPLAY 4 形式单元 3 参数个数 2 全局DISPLAY地址 1 返回地址 0 老SP 3、解决方法: (1)对每个过程或分程序都建立有自己的栈顶指示器TOP,代替原来仅有统一的栈顶指示器, 每个TOP的值保存在各自活动记录中。 (2)每个分程序享用包围它的那个最近过程的DISPLAY。每个分程序都隶属于某个确定的过程,分程序的层次是相对于它所属的那个过程进行编号的。 注:每个过程被当作是0层分程序。而过程体分程序(假定是一个分程序)当作是它所管辖的第1层分程序。 10.3 堆式存储分配 procedure swap(x,y:integer); var temp:integer; begin temp:=x; x:=y;y:=temp end; 调用swap(a,b)过程将不会影响a和b的值。 其结果等价于执行下列运算: x :=a; y :=b; temp :=x; x :=y; y :=temp; swap(x,y) int *x,*y; {int temp; temp=*x; *x=*y; *y=temp;} main( ) {int a=1,b=2; swap(a,b); printf(“a is now %d,b is now %d\n”,a,b);} 三、过程作为参数传递 program Main(input,output); procedure a(function x(m:integer):integer) begin writeln(x(5)); end{a} procedure
您可能关注的文档
- 四级新题型预测试卷(第三套)题目-131112.docx
- 小猪会有拉稀的病症这要怎么办.doc
- 仔猪腹泻原因及治疗方法.doc
- 笔记本怎么做wifi热点(xp版).doc
- 激光对中仪使用说明.doc
- 20130121省培《学员手册》.doc
- 同等学力申硕学员手册(全).docx
- 长寿今生的秘密.pptx
- 2019外国文学专题.doc
- 抗战小英雄故事演讲稿.docx
- 山西天一大联考2025-2026学年高二上学期期末学情监测语文试题(试卷+解析).docx
- 山西忻州部分学校2025-2026学年高一上学期2月质量检测数学试题(人教B版)(试卷+解析).docx
- 山西运城市2025-2026学年高二第一学期期末调研测试数学试题(试卷+解析).docx
- 陕西省榆林市榆阳区2025-2026学年八年级上学期期末地理试题(试卷+解析).docx
- 陕西西安市碑林区2025-2026学年度第一学期期末八年级生物试题(试卷+解析).docx
- 四川省广元市苍溪县2025-2026年八年级上学期期末道德与法治试题(试卷+解析).docx
- 江苏泰州市姜堰区2025-2026学年七年级上学期1月期末数学试题(试卷+解析).docx
- 江苏省扬州市邗江区2025-2026学年九年级上学期期末考试化学试题(试卷+解析).docx
- 江西上饶市铅山县2025-2026学年第一学期期末考试八年级数学试题(试卷+解析).docx
- 江苏扬州市高邮市2025-2026学年度第一学期期末学业质量监测试题九年级英语(试卷+解析).docx
原创力文档

文档评论(0)