运行环境RunTimeEnvironments.ppt
《运行环境RunTimeEnvironments.ppt》由会员分享,可在线阅读,更多相关《运行环境RunTimeEnvironments.ppt(50页珍藏版)》请在三一文库上搜索。
1、第8章 运行环境 (Run-Time Environments),主要内容,绑定(Binding) 存储(Storage)组织(Organization)与分配(Allocation) 参数(Parameter)传递(Passing) 过程说明与调用 符号表(Symbol Table)管理,8.1 绑定(Binding),Binding的概念 将符号名和相应目标数据(的地址)对应起来 标识符与数据目标的对应 变量名数据存储单元地址 过程名、函数名程序段入口地址 相关问题 变量和过程的作用域,决定绑定的有效期,分段式程序 Program layer Int a,b,c Begin Sub(a+b
2、,b,a) End Subroutine Sub(x,y,z) Real a,b,c Begin End,嵌套式程序 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 end,绑定的时机与策略,语言定义的标识符的生存期决定最终绑定的时机 全局变量:全程有效程序装入时 局部变量:分段有效进入过程或分程序时,变量名的绑定,静态(Sta
3、tic)绑定:编译时指定(相对地址) 词法分析期间在符号表中建立变量的表项 回忆:说明语句的语义分析:字节数计算,填写变量地址 动态(Dynamic)绑定:运行时指定(具体地址/相对地址) 如:动态数组,过程/函数名的绑定,为过程指定程序代码段入口地址 静态绑定:编译时指定相对地址 (词法分析:在符号表中建立过程的表项) 语义分析:构造目标代码,填写过程的入口地址 如:一般的函数、子例程 动态绑定 运行时指定函数名作为形式参数(formals) 如:函数指针、虚函数(C+),8.2 存储组织与分配(P257),运行时刻的内存划分(Partition) 局部数据的静态分配(Static Allo
4、cation) 局部数据的动态分配(Dynamic Allocation) 层次单元法 栈式(Stack)存储分配策略 堆式(Heap)存储分配策略,运行时刻的内存划分,局部数据区中的一个栈单元 活动记录(静态/动态分配),静态存储分配,特点 编译时刻确定存储位置 访问效率高 主要用途 子程序的目标代码段 全局数据目标(全局变量) ?用什么样的算法实现静态存储分配,静态存储分配策略介绍,顺序分配算法 按照程序段出现的先后顺序逐段分配,程序段 区域 021 2236 3754 5571 7294 95104 共需要105个存储单元,程序段之间的调用关系程序段号/所需数据空间,能用更少的空间么?,
5、分层分配算法,允许程序段之间的覆盖(覆盖可能性分析),程序段 区域 6 09 5 022 4 016 3 2340 2 1731 1 4162 共需要63个存储单元,思考:如何设计分配算法?,7/80,静态存储分配无法克服的问题1,动态数组问题 层次单元法 层次单元 标准单元的使用,静态存储分配无法克服的问题2,递归调用问题 栈式存储分配,栈(Stack)式存储分配,用途 过程的局部环境 活动记录 特点 嵌套调用次序 先进后出 生存期限于本次调用 自动释放,活动记录,活动记录,活动记录,运行栈,过程数据区结构,SPn SPn-1 SP1 SP0,SP,SPn为第n层过程数据区首址,静态存储分配
6、无法克服的问题3,被调用者的生存期超过调用者/局部数据需要保留( save ) 堆式存储分配,堆(Heap)式存储分配,用于动态数据结构 存储空间的动态分配和释放 实现方法: 将内存空间分为若干块,根据用户要求分配 无法满足时,调用无用单元收集程序将被释放的块收集起来重新分配,8.3 参数传递,传值调用 call-by-value 过程调用时计算实参(Actual),将值存到活动记录 形参(Formal)绑定于活动记录的实参域,引用调用 Call-by-Reference/Address 如果实在参数具有左值,则存放其左值到活动记录中;否则计算出表达式的值,将此值存入一个单元,并将该单元的地址
7、传给被调用者。,复制恢复 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
8、 if C then S1 else S2 的翻译 C.true := newlabel; C.false := newlabel; S1.next := S2.next := S.next; S.code := C.code | gen( C.true: )| S1.code | gen( goto S.next ) | gen( C.false: ) | S2.code,上次课主要内容,S while C do S1翻译 S.begin := S1.next := newlabel; C.true := S1.begin := newlabel; C.false := S.next; S.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 运行 环境 RunTimeEnvironments
链接地址:https://www.31doc.com/p-2710114.html