- 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页,共31页,星期日,2025年,2月5日程序单元 FORTRAN的子例程(subroutine) PASCAL的过程/函数(procedure/function) C的函数程序单元的激活(调用)与终止(返回)第2页,共31页,星期日,2025年,2月5日过程与活动过程的每一次运行(或执行)被称为一次活动(activation)。活动是一个动态的概念,除了设计为永不停机的过程(如操作系统等),或者是因设计错误而出现死循环的过程之外,任何过程的活动均有有限的生存期(lifetime)。程序单元的执行需要: 代码段+活动记录(程序单元运行所需的额外信息,如参数,局部数据,返回地址等)第3页,共31页,星期日,2025年,2月5日运行时内存划分代码段静态数据区栈(stack)堆(heap)大小可以静态确定全局/局部静态变量活动记录栈动态分配的数据第4页,共31页,星期日,2025年,2月5日活动记录为了管理过程在一次执行中所需要的信息,使用一个连续的存储块,这个连续的存储块称为活动记录(Activationrecord)第5页,共31页,星期日,2025年,2月5日活动记录的结构及内容指针SP指向现行过程的活动记录在栈里的起始位置。TOP:活动记录的栈顶临时单元内情向量局部变量形式单元静态链动态链返回地址TOPSP编译将数组的有关信息记录在一些单元中,称为数组的“内情向量”。形式单元:存放相应的实在参数的地址或值。动态链:指向调用该过程前的最新活动记录地址的指针。运行时,使运行栈上各数据区按动态建立的次序结成链。链头为栈顶起始位置。静态链:指向静态直接外层最新活动记录地址的指针,用来访问非局部变量。第6页,共31页,星期日,2025年,2月5日常见的存储分配策略静态分配策略动态分配策略栈式动态分配策略堆式动态分配策略第7页,共31页,星期日,2025年,2月5日存储分配策略静态分配策略:如FORTRAN不允许过程递归不含可变体积的数据对象,或待定性质的名称因此编译时能完全确定每个数据项存储空间的位置情况动态分配策略:如PASCAL,C允许过程递归允许动态申请和释放存储空间因此,编译时不能完全确定数据项的性质,大小等,如,允许递归过程和可变数组,名字作用域和生存期满足分程序结构所限定的作用范围.第8页,共31页,星期日,2025年,2月5日动态分配策略栈式动态分配策略内存先申请先释放堆式动态分配策略内存申请和释放不遵循先请后放时,一般的处理方法是:让运行程序持有一个大存区(称为堆),凡申请者从堆中分给一块,凡释放者归还给堆第9页,共31页,星期日,2025年,2月5日动态存储分配---简单栈式要求:1,没有分程序结构;2,过程定义不允许嵌套;3,允许过程递规调用;第10页,共31页,星期日,2025年,2月5日C程序结构全局数据说明main(?){main中的数据说明}voidR(?){R中的数据说明}voidQ(){Q中的数据说明}第11页,共31页,星期日,2025年,2月5日C语言程序的存储组织第12页,共31页,星期日,2025年,2月5日C的活动记录连接数据(两项):老SP值(即前一活动记录的起始地址)返回地址;(2)参数个数;(3)形式单元(存放实在参数的值或地址);(4)过程的局部变量(简单变量)、数组的内情向量和临临时工作单元。第13页,共31页,星期日,2025年,2月5日C的活动记录临时工作单元内情向量简单变量形式单元参数个数返回地址老SP210TOPSP第14页,共31页,星期日,2025年,2月5日堆式动态存储分配堆变量堆空间的管理策略减少碎片的技术空间的释放第15页,共31页,星期日,2025年,2月5日需求:一个程序语言允许用户自由地申请数据空间和退还数据空间,或者不仅有过程而且有进程(process)的程序结构。操作:堆提供两个操作,分配操作和释放操作情况:经一段运行时间之后,这个大空间就必定被分划成许多块块,有些占用,有些无用(空闲)--碎片问题第16页,共31页,星期日,2025年,2月5日堆式动态储分配当运行程序要求一块体积为N的空间时,我们应该分配哪一块给它呢?运行程序要求一块体积为N的空间,但发现没有比N大的空闲块了,然而所有空闲块的总和却要比N大得多。如果运行程序要求一块积为N的空间,但
原创力文档


文档评论(0)