编译原理-运行环境

编译原理-运行环境

ID:46514677

大小:482.50 KB

页数:44页

时间:2019-11-24

编译原理-运行环境_第1页
编译原理-运行环境_第2页
编译原理-运行环境_第3页
编译原理-运行环境_第4页
编译原理-运行环境_第5页
资源描述:

《编译原理-运行环境》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第8章运行环境(Run-TimeEnviroments)主要内容绑定(Binding)存储(Storage)组织(Organization)与分配(Allocation)参数(Parameter)传递(Passing)过程说明与调用符号表(SymbolTable)管理8.1绑定(Binding)Binding的概念将符号名和相应目标数据(的地址)对应起来标识符与数据目标的对应变量名──数据存储单元地址过程名、函数名──程序段入口地址相关问题变量和过程的作用域,决定绑定的有效期分段式程序ProgramlayerInta,b,cBe

2、gin……Sub(a+b,b,a)……EndSubroutineSub(x,y,z)Reala,b,cBegin……End嵌套式程序ProgramlayerInta,b,cProcedureSub1(x,y,z)Intx,y,zProcedureadd(a,b)Reala,bBeginRealx,y,zx=ay=x*2+bz=1/yEndBegin……EndProcedureSub2(x,y)……Begin……end绑定的时机与策略语言定义的标识符的生存期决定最终绑定的时机全局变量:全程有效——程序装入时局部变量:分段有效——进

3、入过程或分程序时变量名的绑定静态(Static)绑定:编译时指定(相对地址)词法分析期间——在符号表中建立变量的表项回忆:说明语句的语义分析:字节数计算,填写变量地址动态(Dynamic)绑定:运行时指定(具体地址/相对地址)如:动态数组过程/函数名的绑定为过程指定程序代码段入口地址静态绑定:编译时指定相对地址(词法分析:在符号表中建立过程的表项)语义分析:构造目标代码,填写过程的入口地址如:一般的函数、子例程动态绑定运行时指定——函数名作为形式参数(formals)如:函数指针、虚函数(C++)8.2存储组织与分配(P257)

4、主要内容运行时刻的内存划分(Partition)局部数据的静态分配(StaticAllocation)局部数据的动态分配(DynamicAllocation)层次单元法栈式(Stack)存储分配策略堆式(Heap)存储分配策略运行时刻的内存划分代码段全局静态数据栈堆局部数据区中的一个栈单元——活动记录(静态/动态分配)数组区临时工作单元区简单变量区形式单元区寄存器保护区返回地址静态存储分配特点编译时刻确定存储位置访问效率高主要用途子程序的目标代码段全局数据目标(全局变量)??用什么样的算法实现静态存储分配静态存储分配策略介绍顺序

5、分配算法按照程序段出现的先后顺序逐段分配1/222/153/184/176/105/23程序段区域0~2122~3637~5455~7172~9495~104共需要105个存储单元程序段之间的调用关系程序段号/所需数据空间能用更少的空间么?分层分配算法允许程序段之间的覆盖(覆盖可能性分析)程序段区域60~950~2240~16323~40217~31141~62共需要63个存储单元1/222/153/184/176/105/23思考:如何设计分配算法?7/80原始总存储需求=105个存储单元beginrealx,y,zx=ay=

6、x*2+bz=1/ybegininta,b,c……begincharname,from,a……end……end……Sub2(x,y)……endS1S2PP4嵌套式程序programlayerinta,b,cprocedureSub1(x,y,z)intx,y,zprocedureadd(a,b)reala,bbeginRealx,y,zx=ay=x*2+bz=1/yendbegin……endprocedureSub2(x,y)……begin……sub1(a1,a2,a3)……endPP3P2P1嵌套过程嵌套分程序静态存储分配无法

7、克服的问题1动态数组问题层次单元法层次单元标准单元的使用静态存储分配无法克服的问题2递归调用问题栈式存储分配栈(Stack)式存储分配用途过程的局部环境活动记录特点嵌套调用次序先进后出生存期限于本次调用自动释放活动记录活动记录活动记录运行栈过程数据区结构SPnSPn-1……SP1SP0数组存储区本过程……所辖分第临时工作单元程一序层局部数组说明存分储程局部变量区序分程序TOP本过程Display形式单元(m+1个)连主调分程序TOP接全局Display地址数返回地址据主调过程SP本过程TOPSPSPn为第n层过程数据区首址静态

8、存储分配无法克服的问题3被调用者的生存期超过调用者/局部数据需要保留(save)堆式存储分配堆(Heap)式存储分配用于动态数据结构存储空间的动态分配和释放实现方法:将内存空间分为若干块,根据用户要求分配无法满足时,调用无用单元收集程序将被释放的块收集起来重新分

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。