编译原理 第7章 运行时刻环境ppt课件.ppt

编译原理 第7章 运行时刻环境ppt课件.ppt

ID:59240641

大小:670.00 KB

页数:39页

时间:2020-09-26

编译原理 第7章  运行时刻环境ppt课件.ppt_第1页
编译原理 第7章  运行时刻环境ppt课件.ppt_第2页
编译原理 第7章  运行时刻环境ppt课件.ppt_第3页
编译原理 第7章  运行时刻环境ppt课件.ppt_第4页
编译原理 第7章  运行时刻环境ppt课件.ppt_第5页
资源描述:

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

1、第7章 运行时刻环境1概述静态存储管理栈式存储管理堆式存储管理27.1概述运行时刻环境为数据分配安排存储位置确定访问变量时使用的机制过程之间的连接参数传递和操作系统、输入输出设备相关的其它接口目的编译程序除了要关心目标代码生成问题外,还必须要考虑程序运行时使用的数据区域的管理问题。3为什么要使用数据区程序运行时各种数据必须放在内存中,便于访问和使用。数据区的管理内存永远不能满足需要;必须找到存贮的数据;按照程序单位(过程、函数)分配和管理数据区。7.1概述4数据区存贮的内容变量和常数(用户自己定义)

2、临时单元:源程序中没有,编译程序在生成中间代码时建立和使用。形式单元:存放过程或函数间传递的参数;返回地址:返回主调程序的入口。保护区:保存主调程序的寄存器内容,恢复现场。数据访问控制信息7.1概述5主题存储管理:栈分配、堆管理、垃圾回收对变量、数据的访问本章核心问题如何访问到数据7.1概述61)存储分配的典型方式目标程序的代码放置在代码区静态区、堆区、栈区分别放置不同类型生命期的数据值,即数据区72)静态和动态存储分配静态分配编译器在编译时刻就可以做出存储分配决定,不需要考虑程序运行时刻的情形不存

3、在可变长的数组、可变长的字符串、指针;不存在函数或过程的嵌套和递归。全局变量8动态分配栈式存储:和过程的调用/返回同步进行分配和回收,值的生命期和过程生命期相同有可变数组、有过程和函数的递归和嵌套。堆存储:生命期比相应过程调用的生命期更长的调用。有静态变量(static)、指针、表单等。手工进行回收垃圾回收机制静态和动态存储分配97.2静态存贮分配分配方式在符号表中按照对象属性顺序分配数据区,从而建立一个数据映像,运行时按照此映像分配实际的内存数据区。10入口NAMETYPEKINDVALDAADD

4、R位置长度0104integer简变Ka0241integer简变Ka+40351integer简变Ka+8┋符号表如下,DA栏表示数据区编号,ADDR栏是相对地址7.2静态存贮分配117.3栈式分配内容:活动树活动记录调用代码序列栈中的变长数据127.3.1活动树过程调用(过程活动)在时间上总是嵌套的:后调用的先返回因此可以用栈式分配来处理过程活动所需要的内存空间。程序运行的所有过程活动可以用树表示每个结点对应于一个过程活动根结点对应于main过程的活动过程p的某次活动对应的结点的子结点对应于此次

5、活动调用的各个过程活动(从左向右,表示调用的先后顺序)。13活动树的例子(1)程序:P277,图7-2过程调用(返回)序列和活动树的前序(后序)遍历对应假定当前活动对应结点N,那么所有尚未结束的结点对应于N及其祖先结点。14mq(1,9)rp(1,9)q(1,3)q(1,0)p(1,3)q(2,3)q(2,1)q(3,3)p(2,3)q(5,9)q(5,5)p(5,9)q(7,9)q(7,7)q(9,9)p(7,9)活动树的例子(1)157.3.2活动记录过程调用和返回由控制栈进行管理每个活跃的活动

6、对应于栈中的一个活动记录活动记录按照活动的开始时间,从栈底到栈顶排列16一般的活动记录的布局实参临时数据返回值可选的控制链可选的访问链保存的机器状态局部数据指向调用者的活动记录用来访问存于其它活动记录中的非局部数据17运行时刻栈的例子a[11]为全局变量main没有局部变量r有局部变量Iq的局部变量i,和参数m,n。18运行栈:把控制栈中的信息拓广到包括过程活动所需的所有局部信息(即活动记录)ma:arraym运行时刻栈的例子19运行栈:把控制栈中的信息拓广到包括过程活动所需的所有局部信息(即活动记

7、录)mi:integerra:arraymr运行时刻栈的例子20运行栈:把控制栈中的信息拓广到包括过程活动所需的所有局部信息(即活动记录)mk:integerq(1,9)a:arraymq(1,9)r运行时刻栈的例子21运行栈:把控制栈中的信息拓广到包括过程活动所需的所有局部信息(即活动记录)mk:integerq(1,9)a:arrayq(1,3)k:integermq(1,9)rp(1,9)q(1,3)q(1,0)p(1,3)运行时刻栈的例子227.3.3调用代码序列调用代码序列(calling

8、sequence)为活动记录分配空间,填写记录中的信息;返回代码序列(returnsequence)恢复及其状态,是调用者继续运行。调用代码序列会分割到调用者和被调用者中。根据源语言、目标机器、操作系统的限制,可以有不同的分割方案把代码尽可能放在被调用者中。23调用/返回代码序列的要求数据方面能够把参数正确地传递给被调用者能够把返回值传递给调用者控制方面能够正确转到被调用者的代码的开始位置能够正确转会调用者的调用位置(的下一条指令)调用代码序列和活动记录的布局相关24

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

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

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