- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理 运行时的存储组织及管理 运行时的存储组织及管理 概述 存储组织 运行时的存储分配策略 静态存储分配 动态存储分配 对非局部名字的访问 参数传递 有关源程序中的一些问题 问题的提出:如何构造运行程序的策略和方法 过程 活动树 控制栈 说明的作用域 名字的绑定 名字与存储的绑定 存储组织 运行时刻内存的划分:假定编译器从操作系统得到一块存储区,运行时的存储空间要划分成块: 生成的目标代码; 数据对象; 记录过程活动的控制栈 对应的数据结构 运行时刻存储分配策略 分配策略是: 静态分配; 栈式分配,或称栈式动态分配; 堆式分配,或称堆式动态分配。 采用哪种分配策略是由源语言的语义决定的。 堆式存储分配 栈式存储分配策略在下列情况下不能使用: 活动结束时必须保持局部名字的值 被调用者的活动比调用者的活动的生存期长。 堆式存储器的策略:(堆管理器管理堆空间) 把连续存储区域分成块,当活动记录或其他对象需要时就分配。 块的释放可以按任意次序进行,所以经过一段时间后,堆可能包含交错的正在使用的和已经释放的区域 堆管理器的效率问题 堆管理的效率问题是数据结构理论中的特殊问题 对每个感兴趣的活动记录的大小,保存一个相应大小的空闲块的链表 可能的话,为大小为s的请求分配一个大小为s’的块,其中s’是大小等于s的最小块。当该块最终被释放后,将其链回原来的空闲块链表 对于大块存储空间,使用堆管理器管理。 其具体管理方法可以参考操作系统中堆内存的管理方法。 栈式存储分配 基于控制栈的原理:? 存储空间被组织成栈,活动记录的推入和弹出分别对应于活动的开始和结束。 与静态分配不同的是,在每次活动中把局部名字和新的存储单元绑定,在活动结束时,活动记录从栈中弹出,因而局部名字的存储空间也随之消失。 当控制流通过图6.3的活动树时活动记录被推人或弹出运行时刻的栈中的情况,设寄存器top标记栈顶。 栈式存储分配 确定活动记录中局部数据的地址: 假设top-sp标记一个活动记录的开始的位置,dx表示x的地址相对于top-sp的偏移量。那么,x在过程的目标代码中的地址可写成dx(top-sp) 在运行时刻,当把x的活动记录筑于栈顶时,寄存器top- sp被赋于实际的地址, top- sp可以是一个寄存器。 调用序列和返回序列 通过在目标代码中生成调用序列和返回序列实现过程的调用。激活一个过程的活动是执行过程语句的结果。 过程语句p(e1,e2,……,en)的目标代码(调用序列)完成任务: 调用者对实在参数求值,并把它们传送给被调用过程的活动记录的参数域。 调用者在被调用者的活动记录中存放返回地址和老top-sp之值。之后调用者把top一sp之值增加到新的栈顶的活动记录的位置。 被调用者存放寄存器值和其它状态信息。 被调用者初始化其局部数据并开始执行。 调用序列和返回序列 返回序列,return目标代码完成的任务是: 被调用者在自己的活动记录的返回值域中放一个返回值。 利用状态域中的信息,被调用者恢复top-sp和其它寄存器,并且按返回地址转移到调用者的代码之中。 调用者复制返回值到自己的活动记录中。 可变长度的数据 源程序的例子 PROCEDURE exam(l,m,n:integer); VAR a:array [1..l] of real; b:array [1..m] of real; c:array [1..n] of real; BEGIN …… END; 编译时,不知 a,b,c的大小,仅对每个数组设置一个指针。 可变长度的数据 参数传递 参数传递 说明的作用域 如果一个说明的作用域是在一个过程里,那么这个过程里出现的该说明中的名字都是局部于本过程的; 除上述之外的名称是非局部的。 参数传递方式:过程的形式参数和实在参数的对应方式。 形式参数和实在参数的“左值”和“右值”之间的对应关系划分参数传递方式: 传值调用 引用调用(传地址调用) 复制-恢复调用 传名调用 参数传递——传值调用 传值调用:计算实参,并把它的右值传给被调用过程 把形参当作局部名字看待,形参的存储单元在被调用过程的活动记录中 调用者计算实参,并把其右值放入形参的存储单元中 传值调用的显著特征是对形参的运算不影响调用者活动记录中的值 打印结果 a is 1, b is 2 参数传递——引用调用 引用调用:传递时,调用过程把实参存储单元的地址传递给被调用过程 如果实参是有左值的名字或表达式,则传递这个左值本身; 如果实参是表达式,没有左值,则计
您可能关注的文档
最近下载
- 中国帕金森病步态障碍管理专家共识.docx VIP
- Unit 1 Happy Holiday 第1课时(Section A 1a-1d)课件 人教版(2024)八年级英语上册.pptx VIP
- 2025年配煤掺烧技术及混配煤管理.pptx VIP
- 跨境电商创业计划书融资.pptx VIP
- F372A 中文版.pdf VIP
- 正确理解和大力推进中国式现代化PPT课件.ppt VIP
- 24S410建筑特殊单立管排水系统安装.docx VIP
- 心血管危重患者安全转运.pptx VIP
- 关于中建某局新员工转正答辩.ppt VIP
- Unit 1 Happy Holiday Section B(3a-Reflecting)课件 2025人教版英语八年级上册.pptx
文档评论(0)