- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第九章 运行时存储空间组织 §9.1 目标程序运行时的活动 活动之间的关系 9.1.2 参数传递 如何将实际参数传递给相应的形式参数? 传地址(call by reference) 传值(call by value) 传名(call by name) /宏 复制-恢复(copy-restore) /得结果 §9.2 运行时存储器的划分 9.2.2 活动记录 9.2.3 存储分配策略 §9.3 静态存储分配 §9.4 简单的栈式存储分配 这类语言,关于局部名称的存储分配,可以直接采用栈式存储分配策略。 9.4.1 C语言的活动记录 §9.5 嵌套过程语言的栈式实现 9.5.1 非局部名字的访问的实现 例如 图.15 程序运行时栈的变化过程。 二、嵌套层次形式表 §9.6 堆式动态存储分配 问题:如果一个程序语言允许用户自由的申请或退还数据空间(如new/delete),或者不仅有过程而且还有进程的程序结构,这种情况下,栈式的动态分配就不适用了,而通常使用堆式的动态存储分配方案。 9.6.1 堆式动态存储分配的实现 定长块管理 变长块管理 分配回收 首次满足法 随机(查栈表) 直接插入表头 最优满足法 请求内存范围较广(查找) 最差满足法 请求内存范围较窄(不查找) 9.6.2 隐式存储回收(用户程序和回收子程序并行工作) 存储块格式: 标记:对已分配的块跟踪程序中各指针的访问路径,如果某个块被访问过,就给这个块加一个标记。 回收:所有未加标记的存储块回收到一起,并插入空闲块链表中,然后消除在存储块中所加的全部标记。 优点:防止死块产生,缺点:开销大,:解决:当空闲块降到某值时开始回收。 * * 编译程序的最终目的是将源程序翻译成等价的目标程序。 为了达到此目的,除了进行词法、语法、语义分析外,在生成目标代码之前,需要把程序静态的正文和实现这个程序运行时的活动联系起来,以便弄清楚将来在代码运行时,源程序中的各个变量、常量等用户定义的量是如何存放的,如何去访问它。 在程序的运行过程中,程序中数据的存取是通过与之对应的存储单元来进行的。 9.1.1 过程的活动 先讨论一个过程的静态源程序和它的目标程序在运行时的活动之间的关系。 过程定义仅仅是一个说明;而过程调用是过程体的一次执行。 过程的活动:是指该过程的一次执行。即每次执行一个过程体,就产生该过程体的一个活动。 一个活动的生存期:指从执行该过程体的第一步操作到最后一步操作之间的这段时间。 一个过程是递归的:如果该过程在还没有退出当前的活动时,又开始了它的一次新的活动。即 在某个时刻,可能有该过程的几个活动在活跃着。 如果 a 和 b 是两个过程的活动,则它们的生存期或者是不重叠的,或者是嵌套的。 9.2.1 运行时存储器的划分 堆 …… 栈 静态数据 目标代码 管理过程的活动 存放动态数据 为了管理过程在一次执行中所需要的信息,使用一个连续的存储块,这个存储块就称为活动记录。 用一个活动记录表示该活动的相关信息,并将其压入栈。 动态链 形式单元 返回地址 静态链 局部变量 内情向量 临时单元 SP TOP 活动记录的大小在编译时可确定。 不同的编译程序关于数据空间的存储分配策略可能不同。 常用的存储分配策略有: 静态分配策略 栈式动态分配策略 堆式动态分配策略 由关于名称的作用域和生成期的定义规则决定。 如果在编译时就能确定一个程序在运行时所需的存储空间的大小,则在编译时就能够安排好目标程序运行时的全部数据空间,并能确定每个数据项的单元地址。 存储空间的这种分配方法叫做“静态分配”。 先考虑一种简单的程序语言的实现。假设该语言不允许过程嵌套,但允许过程递归调用。 例如: C语言的程序结构 int x , y ; main( ) { int a , b ; …… } void R( ) { char ch ; …… } char Q( ) { float x ; …… } 使用栈式存储分配,即:把存储组成一个栈,运行时,每当进入一个过程时,就把它的活动记录压入栈,从而形成
您可能关注的文档
- 第二章战略分析练习详解.doc
- 第二章战略分析—企业外部环境分析.ppt
- 第二章战略薪酬.ppt
- 第二章战略性绩效管理的工具与技术.ppt
- 第二章组织文化1.ppt
- 第讲促销策略.ppt
- 第九、十章国际经济组织法.ppt
- 第九讲 产品策略.ppT
- 第九讲+促销策略.ppt
- 第九讲非政府组织的社会功能.ppt
- 实施指南(2025)《JB_T 12842-2016空调系统用辐射换热器》.pptx
- 实施指南(2025)《JB_T 12843 - 2016 离心式制冷剂压缩机解读》.pptx
- 实施指南(2025)《JB_T 12851-2016柴油机喷油泵 等压出油阀偶件》.pptx
- 实施指南(2025)《HJ 804-2016土壤 8种有效态元素的测定 二乙烯三胺五乙酸浸提-电感耦合等离子体发射光谱法》.pptx
- 实施指南(2025)《HJ600-2011水质梯恩梯、黑索今、地恩梯的测定气相色谱法》.pptx
- 实施指南(2025)《JB_T 6118 - 2016 沉降过滤离心机解析》.pptx
- 实施指南(2025)《HJ 811-2016水质 总硒的测定 3,3'-二氨基联苯胺分光光度法》.pptx
- 实施指南(2025)《HJ 814-2016水和土壤样品中钚的放射化学分析方法》.pptx
- 实施指南(2025)《HJ19-2011环境影响评价技术导则生态影响》.pptx
- 实施指南(2025)《HJ605-2011 土壤挥发性有机物检测标准解读》.pptx
文档评论(0)