运行环境RunTimeEnvironments.pptVIP

  1. 1、本文档共50页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
运行环境RunTimeEnvironments

第8章 运行环境 (Run-Time Environments) 主要内容 绑定(Binding) 存储(Storage)组织(Organization)与分配(Allocation) 参数(Parameter)传递(Passing) 过程说明与调用 符号表(Symbol Table)管理 8.1 绑定(Binding) Binding的概念 将符号名和相应目标数据(的地址)对应起来 标识符与数据目标的对应 变量名──数据存储单元地址 过程名、函数名──程序段入口地址 相关问题 变量和过程的作用域,决定绑定的有效期 绑定的时机与策略 语言定义的标识符的生存期决定最终绑定的时机 全局变量:全程有效——程序装入时 局部变量:分段有效——进入过程或分程序时 变量名的绑定 静态(Static)绑定:编译时指定(相对地址) 词法分析期间——在符号表中建立变量的表项 回忆:说明语句的语义分析:字节数计算,填写变量地址 动态(Dynamic)绑定:运行时指定(具体地址/相对地址) 如:动态数组 过程/函数名的绑定 为过程指定程序代码段入口地址 静态绑定:编译时指定相对地址 (词法分析:在符号表中建立过程的表项) 语义分析:构造目标代码,填写过程的入口地址 如:一般的函数、子例程 动态绑定 运行时指定——函数名作为形式参数(formals) 如:函数指针、虚函数(C++) 8.2 存储组织与分配(P257) 运行时刻的内存划分(Partition) 局部数据的静态分配(Static Allocation) 局部数据的动态分配(Dynamic Allocation) 层次单元法 栈式(Stack)存储分配策略 堆式(Heap)存储分配策略 运行时刻的内存划分 静态存储分配 特点 编译时刻确定存储位置 访问效率高 主要用途 子程序的目标代码段 全局数据目标(全局变量) ??用什么样的算法实现静态存储分配 静态存储分配策略介绍 顺序分配算法 按照程序段出现的先后顺序逐段分配 分层分配算法 允许程序段之间的覆盖(覆盖可能性分析) 静态存储分配无法克服的问题1 动态数组问题 层次单元法 层次单元 标准单元的使用 嵌套式程序 program layer int a,b,c procedure Sub1(x,y,z) int x,y,z procedure add(a,b) real a,b begin Real x,y,z x=a y=x*2+b z=1/y end begin …… end procedure Sub2(x,y) …… begin …… sub1(a1,a2,a3) …… end 静态存储分配无法克服的问题2 递归调用问题 栈式存储分配 栈(Stack)式存储分配 用途 过程的局部环境 活动记录 特点 嵌套调用次序 先进后出 生存期限于本次调用 自动释放 过程数据区结构 SPn SPn-1 …… SP1 SP0 静态存储分配无法克服的问题3 被调用者的生存期超过调用者/局部数据需要保留( save ) 堆式存储分配 堆(Heap)式存储分配 用于动态数据结构 存储空间的动态分配和释放 实现方法: 将内存空间分为若干块,根据用户要求分配 无法满足时,调用无用单元收集程序将被释放的块收集起来重新分配 8.3 参数传递 传值调用 call-by-value 过程调用时计算实参(Actual),将值存到活动记录 形参(Formal)绑定于活动记录的实参域 引用调用 Call-by-Reference/Address 如果实在参数具有左值,则存放其左值到活动记录中;否则计算出表达式的值,将此值存入一个单元,并将该单元的地址传给被调用者。 复制恢复 Copy-Restore 将参数的左、右值同时传给被调用者,被调用者直接使用右值,并将计算结果按照左值返回给调用者 传名调用Call-by-Name 将被调过程的过程体复制到调用处,并将每一个形参“文字地”替换成实参 用换名子程序实现Thunk 是一种早期的语言ALGOL用的一种参数传递方式 上次课主要内容 回填技术 S → if C then S1 的翻译 C.true := newlabel; S1.next := S.next; C.false:= S.next; S.code := C.code ||gen( C.true: ) ||S1.code 上次课主要内容 S → if C then S1

文档评论(0)

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

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档