编译原理课件(hdu)CHAPTER 9(Run-Time Environments).ppt

编译原理课件(hdu)CHAPTER 9(Run-Time Environments).ppt

ID:51495008

大小:219.00 KB

页数:37页

时间:2020-03-24

编译原理课件(hdu)CHAPTER 9(Run-Time Environments).ppt_第1页
编译原理课件(hdu)CHAPTER 9(Run-Time Environments).ppt_第2页
编译原理课件(hdu)CHAPTER 9(Run-Time Environments).ppt_第3页
编译原理课件(hdu)CHAPTER 9(Run-Time Environments).ppt_第4页
编译原理课件(hdu)CHAPTER 9(Run-Time Environments).ppt_第5页
资源描述:

《编译原理课件(hdu)CHAPTER 9(Run-Time Environments).ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Chapter9Run-TimeEnvironments概述存储分配策略(Storage-allocationstrategies)访问非局部名字(Accesstononlocalnames)参数传递(Parameterpassing)10/3/202119.1概述在生成目标代码之前,必须了解目标代码执行时的环境1、空间环境目标代码的运行都是在操作系统分配的一块存储区内进行的这块存储区必须容纳目标代码和目标代码运行时的数据空间(目标代码中指令能访问的空间)10/3/202129.1概述编译程序分配目标程序运行时的数据空间的基本依据是设计程序语言时对程

2、序运行中存储空间的使用和管理办法的规定代码生成器在生成目标代码时必须要体现该程序语言在设计时分配数据空间的规定10/3/202139.1概述2、寄存器环境寄存器是目标机器中的宝贵资源如何分配寄存器提高程序运行的效率是代码生成器主要要解决的问题,(详细内容见下一讲)**数据空间分配和寄存器分配最后都体现在生成的目标代码中10/3/202149.1概述几种典型程序设计语言的特点不同的语言有不同的分配数据空间的规定,有不同的组织运行时刻存储空间的方法10/3/202159.1概述几种典型程序设计语言的特点与差异:CPASCALALGOLFORTRAN过程递

3、归调用过程嵌套定义动态数组动态内存申请指针检查√××√×√√×√√√√√×√××××√10/3/202169.1概述名字的联编(BindingsofNames)名字的左值(l-value)—内存地址,存储名字的瞬时值名字的右值(r-value)—名字的瞬时值名字的联编—将一个内存地址与一个名字联系起来在程序的一次运行中,一个名字右值(瞬时值)可能会经常改变,一个名字也可能被联编到多个地址(如递归调用中)10/3/202179.1概述运行时刻内存的典型划分操作系统收到运行目标程序的指令,分配一块连续的内存空间使目标程序在其上运行P397Fig7.7这只

4、是一个典型的划分,具体语言不同,该划分也不同栈(Stack):支持过程的递归调用堆(Heap):支持动态内存申请10/3/202189.1概述活动记录(ActivationRecords)是一段连续的存储区,用以存放过程的一次执行所需要的信息,如局部数据活动记录的结构P398Fig7.8参数域、状态域、数据域TOP指向栈顶,TOP-SP指向局部数据区的开始位置**这只是一个一般的结构,具体语言不同,活动记录的结构和内容也有差异10/3/202199.1概述过程的活动(Activation)过程的一次完整执行(第一条语句到最后一条语句),称为过程的一次

5、活动过程在执行中称它为活着的如果允许递归调用,程序的一次执行可能有同一个过程的多个实例是活着的**本章主要讨论不同语言的目标程序在运行时的存储分配策略及名字与其左值和右值的关系10/3/2021109.2存储分配策略静态存储分配(Staticallocation)编译时确定所需的全部数据空间的大小编译时安排好每个名字的存储位置(相对地址)采用静态存储分配的典型语言是FORTRAN10/3/2021119.2存储分配策略FORTRAN语言程序是段结构的,主程序段+若干子程序(函数)段没有动态数据类型,每个名字所需空间是确定的没有递归调用,无需栈区没有动

6、态数据结构(如链表),没有动态内存申请,无需堆区10/3/2021129.2存储分配策略因此,编译时可确定数据区大小,为每个名字分配好地址FORTRAN程序运行时内存划分为目标代码区和静态数据区,没有栈区和堆区程序例子:P402example7.4Fig.7.10Fig.7.11Fig.7.1210/3/2021139.2存储分配策略程序设计语言若允许递归调用、可变数组、可变数据结构:编译时无法确定运行时需要的存储空间大小动态存储分配包括:栈式分配(Stackallocation)和堆式分配(Heapallocation)只能在运行时动态地确定,采用

7、动态存储分配10/3/2021149.2存储分配策略栈式存储分配的思想:在运行空间中划分一块存储空间作为栈区程序运行时每当调用一个过程,就将该过程的活动记录压入栈中,过程执行完毕将它的活动记录从栈中弹出例子:P405Fig.7.1310/3/2021159.2存储分配策略栈式存储分配的实现反映在目标代码生成器的构造策略中,最终体现在生成的目标代码中调用序列(CallSequence)目标代码中的一个指令序列,完成调用一个过程的一系列操作,包括为被调用过程分配一个活动记录,并在相应的域中填入信息10/3/2021169.2存储分配策略返回序列(Retu

8、rnSequence)目标代码中的一个指令序列,完成从一个被调用过程返回到它的调用过程的一系列操作,包括释放

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

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

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