第九章_运行时存储空间组织.ppt_第1页
第九章_运行时存储空间组织.ppt_第2页
第九章_运行时存储空间组织.ppt_第3页
第九章_运行时存储空间组织.ppt_第4页
第九章_运行时存储空间组织.ppt_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

1、第9章运行时记忆空间组织、内容、目标程序运行时活动运行时记忆的分割静态记忆分配简单的堆栈式记忆分配嵌套进程语言的堆栈式实现堆栈式动态记忆分配、9.1.1进程活动、 假定程序由几个过程组成,在整个过程中,通过指定从执行第一步操作到最后一步操作之间的操作顺序,执行p调用另一个过程所花费的时间是递归的,并且通过传递9.1.2残奥仪表, 进程是模块编程的主要手段,同时也是程序代码和扩展语言的主要途径的进程定义: procedure add(x,y:integer; var z :整数版本:=x y。 结束; 过程调用add(a、b、c ); 9.1.2残奥仪表传递、残奥仪表传递方式:1.传递地址将实际

2、的残奥仪表地址传递给对应的形式残奥仪表。 2 .得到结果传递地址变形的各残奥仪表对应于两个形式单元,第一个形式单元存储实际残奥仪表地址,第二个单元存储实际残奥仪表的值。 9.1.2残奥仪表传递、残奥仪表传递方式:3.传递值将真正的残奥仪表值传递给对应的形式残奥仪表。 4 .姓名传递过程调用的作用相当于将调用段的整个过程转录到该调用出现的地方,但是用相应的实变量替换任何出现的形式残奥仪表。 9.1目标程序运行时的活动,编译器为了组织存储空间,必须考虑进程是否允许递归。如果过程中的活动返回控件,则如何处理本地名称值在过程调用时传递残奥仪表的方法过程是作为残奥仪表传递的,然后返回,还是可以在程序控制

3、下动态分配存储空间? 是否需要显式释放存储空间? 9.2运行时存储器的划分、一个目标程序的执行所需的存储器空间、存储目标代码的空间存储程序的执行的控制、需要存储连接数据的单元(控制栈)、9.2.1运行时存储器的划分、一个程序9.2.1在执行活动记录时,每次进入流程时,都会在堆栈的顶部累积相应的活动记录。 此记录包括连接数据、格式单元、局部变量、局部数组的内部向量、临时工作单元等。 9.2.2活动记录,当前活动记录的内容:连接数据返回地址动态链:指向调用此进程前的最新活动记录地址的指针。 静态链:指向静态直接外部的最新活动记录地址的指针。 用于访问非本地数据。 格式单元:存储相应的实际残奥仪表的

4、地址或值。 局部数据区域:局部变量、内部向量、临时工作单位(存储表达式的评估结果等)。 9.2.2活动记录,当前活动记录的内容:对任何局部变量x的引用可被表示为对活动记录起点的索引接入: dxSP dx:变量x的地址,并且可在编译时确定。 9.2.3存储分配策略、静态分配策略(FORTRAN )如果在编译时确定了数据空间的大小,则可以采用静态分配方法:在编译时为每个数据项确定运行时存储空间的位置。 如果在编译动态分配策略(PASCAL )时无法确定运行时数据区域的大小,则必须采用动态分配方法。 允许递归进程和动态请求以释放内存。 栈动态分配栈动态分配栈动态分配,9.3静态存储分配FORTRAN

5、程序的特征:整个程序所需的数据空间总量在编译时完全确定,每个数据名的地址静态分配FORTRAN段通常,为每个数据区域存储:的段定义一个本地数据区域,并存储段中未在COMMON中显示的本地名称的值。每个公共块定义一个公共数据区域,用于存储公共块中每个名称的值。9.3每个静态存储器分配、数据区域都有编号,地址分配时,符号表中登录每个数据名所属的数据区域编号和该区域中的相对位置。 各局部数据区域的内容和存储顺序:返回地址:存储调用该段时的返回地址的寄存器保护区域:存储调用段残留在寄存器中的信息。 形式单元:存储实际残奥仪表的地址或值。 子程序段:使用基于堆栈的存储分配机制进行的活动,考虑SUBROU

6、TINE SWAP(A,B) T=A A=B B=T RETURN END、寄存器保护区域、返回地址、a,t,b,0,1,a 此记录包括连接数据、格式单元、局部变量、局部数组的内部向量、临时工作单元等。 全局数据说明Main() Main中的数据说明void R() R中的数据说明void Q() Q中的数据说明、主进程q进程r、q的活动记录、主进程活动记录、TOP, r的活动记录、SP、TOP始终指向堆栈单元、9.4.1 C的活动记录,各过程的活动记录的内容如图:所示,对任意的局部变量x的参照相对于活动记录的起点旧SP值,也就是先前活动记录的地址、残奥元计数、返回地址、格式单元、临时单元、内

7、部向量、本地变量、SP0、1、2、旧SP、TOP、9.4.2 C过程调用、1 )每个PP n )能够直接转换为下一个命令: (i 3)TOP:=Ti (传输值) (i 3)TOP:=addr(Ti )的n是33601-top 3360=sp (保护当前SP) 3TOP:=n (传输堆残奥参数) 为par和call生成的目标代码为: 在如3 )那样进入进程p之后,首先,下面的命令: SP:=TOP 1(定义新的sp )1sp 3360=返回地址(保护返回地址) TOP:=TOP L (新的TOP) L :进程p的活动在编译时能够确定的4 )过程关闭的情况下,以下的命令: TOP:=SP-1 (恢

8、复调用前TOP) SP:=0SP (恢复调用前SP) X:=2TOP (将恢复地址取入UJ 0X 阶层是i 1。 在执行过程时,您必须知道所有外部过程的当前活动记录的起始地址。 (由于进程的定义是嵌套的,因此进程可以引用围绕它的任何进程中定义的变量和数组)、9.5.1实现非本地名访问、1、静态链和活动记录静态链:本进程的直接外层进程的活动记录的起始地址、 接入链接入非本地容量调用活动记录的基础地址、残奥元计数、返回地址、表格单元、临时单元、向量、本地变量、SP0、1、2、动态得到TOP的二、嵌套阶层显示表display进入一个过程后,在制作其活动记录区域的同时,制作嵌套阶层显示表diaplay

9、,将diaplay表作为活动记录的一部分。 提高对非局部量的访问速度,设进程r的外层为q,q的外层为主程序为p,进程r执行时的显示表的内容,diaplay表的活动日志中的相对地址d在编译时能够完全确定。假设引用当前进程的层进程的x变量(层设为k ),则使用以下两个指令: x地址: LD R1 (d k)SP LD R2 dxR1、嵌套进程语言活动记录、残奥元数、返回地址、表单元、临时单元、 在可以获得内部向量的全局Diaplay,3,d,例如过程P1调用过程P2进入P2之后,P2应该如何创建自己的显示表? 答:从P1的diSPlay表自下而上取l2个单元格(l2是P2的层数),通过进入P2并追

10、加新创建的sp值,构成P2的diSPlay表。 通过将P1的显示表地址作为连接数据之一转发至P2,可创建P2的显示表。 主程序p进程s,TOP,SP,动态链,1 .各部分(I=1,2, n )能够直接翻译为下面的命令: (i 4)TOP:=Ti (传输值)的n是: 1TOP:=SP (保护当前SP) 3TOP:=SP d (传输当前显示地址)4TOP:=n 并且,根据全局diSPlay制作当前进程的diSPlay :从全局diSPlay表中自下而上地取得l个单元,在进入p后追加新制作的sp值,由此构成p的diSPlay。 4 .进程关闭时,执行以下指令3360 top :=sp-1 sp :=

11、0spx 3360=2topuj0x,9.6堆栈的动态存储分配,需求:用户可以使用一种程序语言自由分配数据空间和返回数据或者不仅是过程的分配操作和释放操作情况:经过一定的运行时间,这个大的空间必须分成很多块,有一些占有,一些浪费(空闲)的碎片化问题,9.6堆型的动态存储分配,堆管理堆空间的管理策略是碎片化的技术空间的9.6堆栈型动态存储分配堆空间的管理战略1固定长度块管理2可变长度块管理(1)初次满足法(2)最佳满足法(3)最坏满足法、9.6堆栈型动态存储分配、减少片段技术1分配时, 寻找最小的足够大的块释放空块的大小等级2时,合并邻接的块的9.6堆栈型动态存储分配,空间的释放1显式释放编程语

12、言提供机构2隐式(自动)释放(1)第一阶段是标记阶段,被分配如果您曾经访问过某个块,请为该块添加标签。 (2)第二阶段是再利用阶段,所有未标记的存储器块一起被再利用,插入到空块链表中,标记在存储器块上的所有标记被删除。 总结,目标程序运行时的活动运行时内存的分割静态内存分配简单的堆栈内存分配嵌套进程语言的堆栈实现动态内存分配练习,例1 :下一个程序运行时输出的a是什么? (1)如果残奥仪表的传达方法是“传达值”,(2)残奥仪表的传达方法是传达目的地。 程序主(输入、输出); 程序p (x,y,z ); beginy=y 1; z=z x; 结束; begina=2; b=3; p(a b,a,

13、a ); print a end .解: (1)残奥表的传达方法为“传达值”时,a为2。 (2)残奥表的传达方法为传达目的地,a为7。 练习,例2 :过程残奥表的传达方式有几种? 简述“地址传递”和“值传递”的实现原理。 解:残奥表的传达方式有传达值、传达地址、传达名、结果“传达值”方式。 这是最简单的残奥仪表传达方法。 实际的残奥仪表对其值进行补正,并将其传递给调整过程。 具体地,1 .格式残奥仪表被当作过程的局部变量,即,打开到波形残奥仪表的存储器空间,用于调制过程的活动记录,并且这些存储器位置是我们所说的实际残奥仪表或格式单元。 2 .调用过程以校正实际的残奥仪表值,并将它们的右侧值(r-value )放置在为表单单元打开的空间中。 3 .在执行调用过程时,将使用这些格式的单元格,就像使用局部变量一样。转发地址方式。 也称为转发地址或引用调用。 将调用过程传递给协调过程的是指针,它是指向实际残奥仪表存储位置的指针。 1 .如果实际的残奥参数是具有名称或左侧值的表达式,则传递左侧值本身。 2 .如果实际的残奥参数是表达式(如a b或2 ),没有左边的值,则首先计算表达式,将其存储在位置,然后传递该位置的地址。

温馨提示

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

评论

0/150

提交评论