目标程序运行时的存储组织.pptxVIP

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

第10章目标程序运行时的存储组织要求明确静态存储分配和动态存储分配的含义明确活动记录的含义及组成了解静态、动态存储分配的策略掌握PL/0的存储分配策略教学目标

S.PO.P语义分析、生成中间代码生成目标程序代码优化语法分析程序词法分析程序错误处理符号表管理编译程序在编译阶段要为源程序中出现的变量、常量等组织好在运行阶段的存储空间将这种组织形式通过生成的目标代码体现出来为运行阶段实现存储奠定基础

1存储组织概述2静态存储分配3栈式动态存储分配4堆式动态存储分配5PL/0编译程序目标代码解释执行时的存储分配教学内容

10.1存储组织概述运行时存储空间的划分代码空间数据空间目标代码空间静态数据空间栈自由空间堆

10.2静态存储分配在编译阶段由编译程序实现对存储空间的管理,为源程序中的变量分配存储单元。(如看电影)条件在编译时能够确定变量在运行时的数据空间大小运行时不改变

FORTRAN程序的静态分配

过程的活动和活动记录活动记录:为了管理过程在一次执行中所需要的信息,使用一段连续的存储区一个过程的活动:该过程的一次执行。即每次执行一个过程体,就产生该过程的一个活动。

活动记录的结构

动态存储分配在目标程序运行阶段由目标程序实现对存储空间的组织与管理,为源程序中的变量分配存储单元特点在目标程序运行时进行分配编译时为运行阶段设计好存储组织形式,即为每个数据项安排好它在数据区中的相对位置C语言引用sizeof进行计算时,是在编译阶段完成的,还是在运行阶段完成的?(如开大会)

进入时:在栈顶为其分配一个数据区退出时:撤消过程数据区变量生存期具有嵌套特性,即后进先出的特性(如递归)10.3栈式动态存储分配

给运行的程序划分一个大的存储区(称为堆)每当需要时可从堆中分得一块用完之后再退还给堆变量生存期具有随机交叉特性,即非后进先出的特性(如程序运行时动态申请存储空间)10.4堆式动态存储分配

10.5PL/0目标代码解释执行时的存储分配code程序存储器s数据存储器i指令寄存器b基本地址寄存器t地址寄存器p程序地址寄存器pcode解释器的结构保存目标代码执行时的数据栈

structinstruction{enumfctf;intl;inta;};structinstructioncode[CXMAX+1];(1)程序存储器codeints[STACKSIZE];在调用一个过程时,先要在数据栈顶为过程及其变量分配一些位置。所有操作运算都在栈顶找到它的操作数,并以计算结果代之。栈顶数据元素在数据栈的位置通过地址寄存器t标记。(2)数据存储器s

程序地址寄存器pintp=0;p是code数组的索引地址,用来存放下一条要解释执行指令在程序存储器code里的位置。在解释执行时才用到,初值为0,即第1条要解释执行的指令存放在code[0]。地址寄存器tintt=0;地址寄存器t是s数组的索引地址,由于数据存储器被当作数据栈使用,它用来存放数据栈s的栈顶位置。在解释执行时才用到,初值为0,在解释执行前,数据栈是空栈。。

(5)指令寄存器istructinstructioni;用来存放正在解释执行的一条目标代码指令。在解释程序里,每次通过i=code[p];和p=p+1;这两条赋值语句,完成从程序存储器code中取指令,以及使程序地址寄存器p指向下一条指令位置的任务。(6)基本地址寄存器bintb=1;在解释执行时用到,初值为1,它等于正在执行的过程段在数据栈的起始地址。

2019活动记录012020连接数据(也称联系单元)022021局部数据区032022静态链动态链返回地址04

SL:静态链,指向定义该过程的直接外层过程的活动记录的基地址,以确保变量的正确存取。DL:动态链,指向调用该过程前正在运行的那个过程的活动记录的基地址,以确保能返回到调用过程段。RA:返回地址,保存该被调过程返回后的地址,即当时程序的地址寄存器p的值,也就是调用过程指令的下一条指令的地址,用来确保返回到正确的指令地址。三个联系单元:

以下两条指令协助cal完成过程调用和返回ini0a

过程目标程序的入口,开辟数据段。a为局部变量个数+3。开辟数据段的结果是改变栈顶寄存器t的值,即t=t+a。在block中调用statement之前调用gen(ini,0,dx);opr00

过程目标程序的出口,释放数据段。恢复调用该过程前正在运行的过程的数据段基地址寄存器的值和栈顶寄存器的值,并将返回地址送到地址寄存器p中,以使调用前的程序从断点开始继续执行。在block中调用statement之后调用gen(opr,0,0);

小结重点掌握:静态存储分配(Fort

文档评论(0)

yingyaojun1975 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档