- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1 1 第八章 运行时的存储组织与管理 8.1 概述 8.2 静态存储分配 8.3 栈式存储分配 8.4 堆式存储分配 8.5 本章小结 8.1 概述 从逻辑上看,代码生成前,编译程序必须进行目标程序运行环境的设计和数据空间的分配 所谓运行时的环境是指目标计算机的寄存器和存储器的结构,以及用来管理存储器并保存执行过程所需要的信息。 几乎所有的程序设计语言都使用3种类型的存储环境:完全静态环境、基于栈的存储环境和基于堆的存储环境中的一种或几种。 8.1 概述 从逻辑上看,代码生成前,编译程序必须进行目标程序运行环境的设计和数据空间的分配 数据空间包括:用户定义的各种类型的数据对象(变量和常量)所需的存储空间,作为保留中间结果和传递参数的临时工作单元,调用过程时所需的连接单元,组织输入/输出所需的缓冲区。 8.1 概述 存储管理复杂度取决于源语言本身,具体包括: 允许的数据类型的多少 语言中允许的数据项是 静态确定 动态确定 程序决定名字的作用域的规则和结构 段结构 过程定义不嵌套,只允许过程递归调用 分程序结构 分程序嵌套 过程定义嵌套 存储区划分成:目标区、静态数据区、栈区、堆区: 目标代码区用以存放目标代码,这是固定长度的,即编译时能确定的 全程/静态数据区用以存放编译时能确定所占用空间的数据 堆/栈区用于可变数据以及管理过程活动的控制信息 过程的活动记录 过程的活动记录是一段连续的存储区,用来存放过程的一次执行所需要的信息。 数据空间的使用和管理方法分成三种: 静态存储分配 栈式动态存储分配 堆式动态存储分配 8.2静态存储分配 指在编译时对数据对象分配固定的存储位置,运行时始终不变。即一旦存储空间的某个位置分配给了某个数据名,则在目标程序的整个运行过程中,此位置(地址)就属于该数据名。 由静态存储分配产生的数据区称为静态数据区。 静态存储分配适用于不允许递归过程或递归调用,不允许可变体积的数据结构的语言 静态存储分配的特点:简单、易于实现 例:FORTRAN语言,它所有的数据都属于这一类。 8.2静态存储分配 例:FORTRAN程序 主程序段 Program TEST …… END SUBROUTINE LADD(A,SIZE,QMEAN) COMMON MAXSIZE INTEGER MAXSIZE,SIZE REAL A(SIZE),QMEAN,TEMP INTEGER K TEMP 0,0 DO 10K=1,SIZE TEMP=TEMP+A(K) 10 CONTINUE QMEAN=TEMP/SIZE RETURN END …… 8.2 静态存储分配 动态存储分配 如果一个程序设计语言允许递归过程、可变数组或允许用户自由申请和释放空间,那么,就需要采用动态存储管理技术 栈式动态存储分配 这种分配策略是将整个程序的数据空间设计为一个栈 8.3.1 简单栈式存储分配 对于没有分程序结构,过称规定一不允许嵌套单允许过程递归调用的语言,可以采用一种简单的栈式存储分配策略。 C语言满足上述特点。 8.4 堆式存储分配 假设程序运行时有一个大的存储空间,每当需要时就从这片空间中借用一块,不用时再退还,由于借还的时间先后不一,即不空间的使用不一定按照“先申请后释放”的原则,经一段运行之后,程序运行空间将被划分成许多块,有些占用,有些空闲。那么当运行程序要求一块体积为N的空间时,需要决定应该从哪个空闲块得到这个空间。 理论上讲,应该从比N稍大一些的空闲块中取出N个单元,以便使大的空闲块派更大的用场,但实现难度很大 8.5 临时变量的存储分配 产生中间代码时,为了暂存中间结果,编译程。序会大量引进临时变量名,其属性简单,不登记到符号表,只在它们出现的地方加上类型信息皆可。 一般的分配原则:如果两个临时变量名的作用域不相交,则它们可以分到同一单元种。一个临时变量名自第一次赋值的地方器至最后一次被引用的地方止,这区间的程序所能达到的全体四元式构成它的作用域。 8.5 临时变量的存储分配 临时变量的存储分配的简单实现: 令临时变量名均分配在局部数据区中,若某一单元已分配给某些临时变量,则把这些名字的作用域(它们必须是互不相交的)作为单元的分配信息记录下来。每当要对新临时变量名进行分配时,首先要求求出该变量名的作用域,若它的作用域与某个单元所记录的全部作用域均不相交,就把这个单元分配给这个新名,同时把它的作用域也添加到该单元的分配信息之中。如果新临时
您可能关注的文档
最近下载
- 河南省许昌市2025年某中学小升初入学分班考试英语考试真题含答案.docx VIP
- 大型泵站工程运行管理实施方案.docx
- ISO45001-2018职业健康安全管理体系之4-2:“4 组织及环境-4.2理解工作人员和其他相关方的需求和期望”解读和应用指导材料(2024A1-雷泽佳).docx VIP
- 医疗信息系统的网络安全数据标注指南.docx
- SH∕T 3543-2017 石油化工建设工程项目施工过程技术文件规定 非正式版.pdf VIP
- 中国专利法详解读书重点笔记.doc VIP
- 2026届高考语文背诵诗词补充:《菩萨蛮·书江西造口壁》.pptx VIP
- 强制性条文执行计划(完整版).doc
- 关于夏天的课件.pptx VIP
- 2025中铁五局集团有限公司笔试参考题库附带答案详解.pdf
文档评论(0)