编译原理,清华大学,第2版-第10章目标程序运行时存储组织ppt课件.ppt

编译原理,清华大学,第2版-第10章目标程序运行时存储组织ppt课件.ppt

ID:58665050

大小:322.00 KB

页数:46页

时间:2020-10-05

编译原理,清华大学,第2版-第10章目标程序运行时存储组织ppt课件.ppt_第1页
编译原理,清华大学,第2版-第10章目标程序运行时存储组织ppt课件.ppt_第2页
编译原理,清华大学,第2版-第10章目标程序运行时存储组织ppt课件.ppt_第3页
编译原理,清华大学,第2版-第10章目标程序运行时存储组织ppt课件.ppt_第4页
编译原理,清华大学,第2版-第10章目标程序运行时存储组织ppt课件.ppt_第5页
资源描述:

《编译原理,清华大学,第2版-第10章目标程序运行时存储组织ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第10章目标程序运行时的组织教学要求:本章介绍目标程序运行时的存储组织方式,包括静态存储分配和动态存储分配。要求掌握各种存储组织形式的基本方法。教学重点:静态分配策略和动态分配策略的基本思想,嵌套过程语言栈式分配,活动记录、运行时栈的组织。10.1概述从逻辑上看,代码生成前,编译程序必须进行目标程序运行环境的设计和数据空间的分配数据空间包括:用户定义的各种类型的数据对象(变量和常量)所需的存储空间,作为保留中间结果和传递参数的临时工作单元,调用过程时所需的连接单元,组织输入/输出所需的缓冲区。存储管理复杂度取决于源语言本身,具体包括:允许的数据类型的多少?语言中允许的数据项是:静态确定?

2、动态确定?程序决定名字的作用域的规则和结构段结构?过程定义不嵌套?只允许过程递归调用?分程序结构:分程序嵌套?过程定义嵌套?目标代码区静态数据区Stackheap1、存储组织:编译程序对目标程序运行时的组织(运行环境和分配存储)。如通常存储区布局可为:目标代码区用以存放目标代码,这是固定长度的,即编译时能确定的。静态数据区用以存放编译时能确定所占用空间的数据。堆/栈用于存放可变数据以及管理过程活动的控制信息。三种数据区对应着下述三种不同的分配策略2、存储分配策略:(1)静态存储分配——在编译时能确定目标程序运行中所需的全部数据空间的大小,编译时安排好目标程序运行时的全部数据空间,确定每个

3、数据对象的存储位置。注:1、程序结构特点:不允许递归调用,而且不含有可变数组。(如FORTRAN语言)。2、基本策略:在编译时,根据各类数据所需的存储空间大小以及存储方式规定,在符号表中建立“名字-地址”对应关系,然后根据这些对应关系进行变量名的地址分配。(2)动态存储分配——在运行阶段动态地为源程序中的量分配存储空间。(栈式、堆式)注:1)若某程序设计语言允许过程递归调用,而且允许使用可变数组,那么在编译时就不可能完全为其数据项目分配存储单元,必须采取动态存储分配策略。2)动态分配数据单元时一般使用栈,即栈式存储管理。栈式:简单的栈式分配方案嵌套过程的栈式分配方案分程序结构的存储分配方

4、案3、过程活动:一个过程的活动指的是该过程的一次执行。4、活动记录(AR):一个过程的一次执行所需要的信息使用一个连续的存储区来管理,这个区(块)叫做一个活动记录。此记录含有连接数据、形式单元、局部变量、局部数组的内情向量和临时工作单元等。对任何局部变量X的引用可表示为变址访问:dx[SP]dx:变量X相对于活动记录起点的地址,在编译时可确定。SP012TOP每个过程的活动记录内容(非嵌套语言)临时单元内情向量局部变量形式单元参数个数动态链返回地址连接数据返回地址动态链:指向调用该过程的最新活动记录地址的指针。静态链:指向直接外层最新活动记录地址的指针,用来访问非局部数据。SP01

5、2TOP每个过程的活动记录内容(嵌套语言)临时单元内情向量局部变量形式单元静态链动态链返回地址形式单元:存放相应的实参的地址或值。局部数据区:局部变量、内情向量、临时工作单元(如存放对表达式求值的结果)。SP012TOP每个过程的活动记录内容临时单元内情向量局部变量形式单元静态链动态链返回地址临时单元内情向量局部变量形式单元静态链动态链返回地址SPTOP连接数据(控制信息)SP为当前活动记录的起始位置。TOP为栈顶单元。分别放在两个寄存器中。访问信息1、callP被翻译成:1[TOP]:=SP(保护现行SP)JSRP(转子指令)参数个数返回地址形式单元内情向量局部变量老SP临时单元

6、活动记录的填写TOPSP调用过程的活动记录老SP2、转进过程P后,首先应执行下述指令:SP:=TOP+1(定义新的SP)1[SP]:=返回地址(保护返回地址)TOP:=TOP+L(新TOP)L:过程P的活动记录所需单元数,在编译时可确定。参数个数返回地址形式单元内情向量局部变量老SP临时单元TOP调用过程的活动记录返回地址TOPSP3、过程返回时,应执行下列指令:X:=2[TOP](把返回地址取到X中)TOP:=SP-1(恢复调用前TOP)SP:=0[SP](恢复调用前SP)UJX(按X返回)参数个数返回地址形式单元内情向量局部变量老SP临时单元调用过程的活动记录TOPSP

7、SPTOP10.2栈式存储分配的实现一、简单的栈式存储分配的实现程序结构特点:没有分程序结构,过程定义不嵌套,过程可递归调用。简单栈式分配方案:把存储区组织成一个栈,运行时每进入一个过程,就把它的活动记录压入栈,形成过程工作时的临时数据区,该过程结束时取消该数据区。例:Main(){Main中的数据说明}procR(){R中的数据说明}…procQ(){Q中的数据说明}主程序→过程Q→过程RQ的活动记录TOPR的活动记录SP

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

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

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