编译原理及实现技术(张睿)精品课件10.pptVIP

编译原理及实现技术(张睿)精品课件10.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第九章 运行时的存储空间 运行时存储空间的结构和分配 过程活动记录AR 运行时变量的访问 运行时环境 why 了解程序运行时内存结构 从而在目标代码中实现 what (1)运行时内存的组织结构; (2)内存空间分配; (3)抽象地址的具体化; how 在目标代码中 体现这些机制 静态 动态 基于栈式 静态区分配 堆区分配 栈区分配 变量访问环境 知识结构 目标程序运行时的活动 活动:过程的一次执行。如果a和b是两个活动,则它们的生存期或者是不重叠的,或者是嵌套的。 活动树:由活动构成的一个树,其中 树中的每个节点代表一个活动。 树的根节点是程序的主过程(函数)的活动。 在树中若b为a的儿子节点,则必有a活动调用了b活动。 在树中若a为b的左兄弟节点,则必有a活动先于b活动执行。 名字的作用域和绑定 作用域:一个声明起作用的程序部分称为该声明的作用域。一个名字在程序中只声明一次,该名字在程序运行时也可能代表不同的数据对象。 环境和状态:环境表示将名字映射到存储单元的函数,状态表示将存储单元映射到它所保存的值的函数 。 绑定:如果环境将名字x映射到存储单元s,我们就说x被绑定(binding)到s。 运行时的存储空间结构 要保存的信息: 目标代码;数据;库函数代码; 过程活动的控制信息等 运行时的存储空间结构: 库代码空间 目标代码空间 静态区空间 堆区空间 栈区空间 最大地址 最小地址 静态存储分配 存储对象的存储位置在程序的整个生命周期是固定的。 分配对象: 全程变量 常量 信息表 分配方法: 块地址法:(DataArea,Offset) 变址模式:(Register,Offset) 实例 #define n 5 int sum = 0; int square(int i){ int j=i*i; return j; } void main(){ int j = square(n); sum = sum +j; } … square临时变量 t1 square局部变量 j square形参变量 i square信息 main临时变量 t1 main局部变量 j main信息 静态区 sum n 目标代码 … 堆区的存储分配 可随时分配和释放空间 存储对象: 动态申请空间的变量的值 释放空间方法: 显式释放: 隐式释放:单指针释放、计数释放法、标记释放法 分配空间方法: 最佳符合法;首次优先法;循环首次优先法 栈式存储分配 存在递归调用 存储对象: 过程中被声明的形参、局部变量 临时变量 分配方法: 对每个被调用过程分配一段存储空间,sp存放当前过程空间的开始地址;对变量X:(Level,off),则其存放地址为off[sp]。过程结束时自动释放空间; 不能存储: 值的生命周期长于过程的变量; 动态申请空间的变量; 过程活动记录 过程活动记录(AR):过程的一个现场记录 记录内容: 过程控制信息:先行活动记录的动态链指针、返回地址、层数和长度等 机器状态信息:寄存器状态等 全局变量信息:非局部变量的信息 局部变量值:形参变量、局部变量和临时变量 AR的结构: 动态链指针 返回值 寄存器状态 变量访问环境 形参变量区 局部变量区 临时变量区 控制状态信息 机器状态信息/中断现场 变量访问信息 变量 sp 过程层数/AR大小 返回地址 抽象地址分配 (?,off)? LabelDec ?(?,off) (?,off)? ConstDec ?(?,off) (?,off)? TypeDec ?(?,off) (?,off)? VarDec?(?,off+n) (?,off)? ProcDec ?(?,off) (?,off)? FuncDec ?(?,off) (?,off)? Proc p( ?(?+1,off0) (?,off)? Func f( ?(?+1,off0) (?,off)? Proc P( ?(?+1,off0) (?,off)? Fucn F( ?(?+1,off0) (?,off)? T* ID ?(?,off+2) (?,off)? T ID ?(?,off+m) 抽象地址分配例子 (?,10) #define pai 3.14 // (?,10) Label L100,L200; (?,10) typedef arr{int a[10]}; (?,10) int x; (?,12) int a[5]; (?,22) float f( (?+1,off0) float * x, (?+1,off0+2) arr a, (?+1,off0+22) a

文档评论(0)

1243595614 + 关注
实名认证
文档贡献者

文档有任何问题,请私信留言,会第一时间解决。

版权声明书
用户编号:7043023136000000

1亿VIP精品文档

相关文档