- 1、本文档共42页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第20讲-运行时存储II
中国科大 编译原理和技术 本讲纲要 全局分配策略 非局部名字的访问 参数传递 分配策略分类 局部分配策略 过程内部的存储分配策略,主要考虑的是活动记录内的内存布局 全局分配策略 为完整的程序完成存储分配,所要采取的内存分配策略 代码 全局、静态数据 活动记录之间的组织方式 动态分配的内存 三种全局分配策略 6.2.2 静态分配策略 静态分配特点 名字在程序被编译时绑定到存储单元,不需要运行时的任何支持。 绑定的生存期是程序的整个运行时间 如果完全采取静态分配策略,那么 不能允许过程递归 数据对象的长度及其在内存中的位置,都必须是编译时就可以知道的 不允许动态的数据结构 6.2 全局存储分配策略 6.2.3 栈式分配 栈式分配主要用于管理过程的活动记录。 局部变量的生存期是过程活动的时间。 控制进入该过程时,局部变量绑定到存储单元,过程活动结束后,局部变量的空间释放。 6.2 全局存储分配策略 6.2.3 栈式分配 6.2 全局存储分配策略 当前活跃着的过程活动可以保存在一个栈中 控制栈的内容:s, q (2, 3), p(2, 3) 6.2 全局存储分配策略 运行栈:把控制栈中的信息拓广到包括过程活动所需的所有局部信息(即活动记录) 6.2 全局存储分配策略 运行栈:把控制栈中的信息拓广到包括过程活动所需的所有局部信息(即活动记录) 6.2 全局存储分配策略 运行栈:把控制栈中的信息拓广到包括过程活动所需的所有局部信息(即活动记录) 6.2 全局存储分配策略 运行栈:把控制栈中的信息拓广到包括过程活动所需的所有局部信息(即活动记录) 6.2 全局存储分配策略 栈式分配的动态释放空间引起悬空引用:引用某个已被释放的存储单元 main() | int ? dangle ( ) { | { int ?q; | int j = 20; q = dangle ( ); | return j; } | } 6.2 全局存储分配策略 6.2.4 堆式分配 程序根据需要进行内存的分配 函数int *f(){ …; return p;} 这里的p必须是在堆上分配的内存,为什么? 三种存储分配策略的比较 本讲纲要 全局分配策略 非局部名字的访问 参数传递 6.3 非局部名字的访问 本节介绍 过程内部如何访问过程外部声明的名字? 不同的作用域规则下,非局部名字的访问方式有所不同 静态作用域 无过程嵌套的静态作用域(C语言) 有过程嵌套的静态作用域(Pascal语言) 动态作用域(Lisp语言) 6.3 非局部名字的访问 6.3.1 无过程嵌套的静态作用域 过程体中的非局部引用的一定是全局名字 全局名字的地址可以静态确定 无须深入栈中取数据,无须访问链 6.3 非局部名字的访问 6.3.2 有过程嵌套的静态作用域 过程嵌套深度 实例(教材P.199, 图6.17): sort 1 readarray 2 exchange 2 quicksort 2 partition 3 变量的嵌套深度:它的声明所在过程的嵌套深度作为该名字的嵌套深度 6.3 非局部名字的访问 寻找非局部名字存储单元的访问链 6.3 非局部名字的访问 1、假定过程p的嵌套深度为np,它引用嵌套深度为na的变量a,na ? np。如何访问a的存储单元? 从栈顶的活动记录开始,追踪访问链np ? na次,到达a的声明所在过程的活动记录。 访问链的追踪用间接操作就可完成。 6.3 非局部名字的访问 访问非局部名字的存储单元 6.3 非局部名字的访问 过程p对变量a访问时,a的地址由下面的二元组表示: (np ? na,a在活动记录中的偏移) 6.3 非局部名字的访问 2、建立访问链 假定嵌套深度为np的过程p调用嵌套深度为nx的过程x np nx的情况 x肯定就声明在p中 被调用过程的访问链必须指向调用过程的活动记录的访问链 6.3 非局部名字的访问 2、建立访问链 6.3 非局部名字的访问 2、建立访问链 假定嵌套深度为np的过程p调用嵌套深度为nx的过程x np ? nx的情况 sort 1 readarray 2 exchange 2 quicksort 2 partition 3 6.3 非局部名字的访问 2、建立访问链 假定嵌套深度为np的过程p调用嵌套深度为nx的过程x np ? nx的情况 p和x的嵌套深度分别为1,2,…,nx? 1的外围过程肯定相同 追踪访问链np ? (nx – 1)次,到达了静态包围x和p的且离它们最近的那个过程的最新活动记录 所到达的访问链就是x的活动记录中的访问链应该指向的那个访问链 6.3 非局部名字的访问 2、建立访问链 6.3
您可能关注的文档
- 第11讲外部性与公共政策(微观经济学(人大,王晋斌).ppt
- 第11讲外部性与公共政策.ppt
- 第11超静定混凝土桥梁施工简介.ppt
- 第129147号两极与冷战.ppt
- 第127544号4.1 视图与盲区.ppt
- 第12讲 Flash8特效使用.ppt
- 第12讲 西亚尘埃起 北非落定 2.ppt
- 第12讲 大气水平运动.ppt
- 第129145号殖民体系的瓦解.ppt
- 第12讲 混凝土墩台施工28257.ppt
- 金融产品2024年投资策略报告:积极适应市场风格,行为金融+机器学习新发现.pdf
- 交运物流2024年度投资策略:转型十字路,峰回路又转(2023120317).pdf
- 建材行业2024年投资策略报告:板块持续磨底,重点关注需求侧复苏.pdf
- 宏观2024年投资策略报告:复苏之路.pdf
- 光储氢2024年投资策略报告:复苏在春季,需求的非线性增长曙光初现.pdf
- 公用环保2024年投资策略报告:电改持续推进,火电盈利稳定性有望进一步提升.pdf
- 房地产2024年投资策略报告:聚焦三大工程,静待需求修复.pdf
- 保险2024年投资策略报告:资产负债匹配穿越利率周期.pdf
- 政策研究2024年宏观政策与经济形势展望:共识与分歧.pdf
- 有色金属行业2024年投资策略报告:新旧需求共振&工业原料受限,构筑有色大海星辰.pdf
文档评论(0)