编译原理课件第十章目标程序运行时的存储组织

编译原理课件第十章目标程序运行时的存储组织

ID:46515312

大小:473.50 KB

页数:82页

时间:2019-11-24

编译原理课件第十章目标程序运行时的存储组织_第1页
编译原理课件第十章目标程序运行时的存储组织_第2页
编译原理课件第十章目标程序运行时的存储组织_第3页
编译原理课件第十章目标程序运行时的存储组织_第4页
编译原理课件第十章目标程序运行时的存储组织_第5页
资源描述:

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

1、第十章 目标程序运行时的存储组织第一节数据空间的三种不同使用方法和管理方法第二节栈式存储分配的实现第三节参数传递第四节过程调用、过程进入和过程返回知识结构8.1概述8.2静态存储分配8.3栈式存储分配8.4堆式存储分配8.5本章小结第八章运行时的存储组织与管理8.1概述从逻辑上看,代码生成前,编译程序必须进行目标程序运行环境的设计和数据空间的分配所谓运行时的环境是指目标计算机的寄存器和存储器的结构,以及用来管理存储器并保存执行过程所需要的信息。几乎所有的程序设计语言都使用3种类型的存储环境:完全静态环境、基于栈的存储环境和基于堆的存储环境中的一种或几种。8.

2、1概述从逻辑上看,代码生成前,编译程序必须进行目标程序运行环境的设计和数据空间的分配数据空间包括:用户定义的各种类型的数据对象(变量和常量)所需的存储空间,作为保留中间结果和传递参数的临时工作单元,调用过程时所需的连接单元,组织输入/输出所需的缓冲区。8.1概述存储管理复杂度取决于源语言本身,具体包括:允许的数据类型的多少语言中允许的数据项是静态确定动态确定程序决定名字的作用域的规则和结构段结构过程定义不嵌套,只允许过程递归调用分程序结构分程序嵌套过程定义嵌套存储区划分成:目标区、静态数据区、栈区、堆区:目标代码区用以存放目标代码,这是固定长度的,即编译时能

3、确定的全程/静态数据区用以存放编译时能确定所占用空间的数据堆/栈区用于可变数据以及管理过程活动的控制信息目标代码区全程/静态数据区栈↑自由空间↓堆8.1运行时存储空间的划分过程的活动记录过程的活动记录是一段连续的存储区,用来存放过程的一次执行所需要的信息。自变量(参数空间)返回地址用作局部数据的空间用作局部临时变量的空间8.2过程活动记录编译程序分配目标程序运行时的数据空间的基本依据是程序语言设计时对程序运行中存储空间的使用和管理办法的规定在程序设计语言语义学中,使用environment表示将一个名字映射到一个存储位置的函数,state表示存储位置到值的映

4、射,如图10.2所示:数据空间的使用和管理方法分成三种:静态存储分配栈式动态存储分配堆式动态存储分配静态存储分配:在编译时能确定目标程序运行中所需的全部数据空间的大小,编译时安排好目标程序运行时的全部数据空间,确定每个数据对象的存储位置如像FORTRAN程序是段结构的,如图10.3所示:8.2静态存储分配图10.4给出一个FORTRAN77的程序例子:PROGRAMCNSUMECHARACTER*50BUF//程序体所拥有的静态量BUFINTEGERNEXT//程序体所拥有的静态量NEXTCHARACTERC,PRDUCE//程序体所拥有的静态量CDATAN

5、EXT/1/,BUF/''/C=PRDUCE()BUF(NEXT:NEXT)=CNEXT=NEXT+1IF(C.EN.'')GOTO6WRITE(*,'(A)')BUF(11)END(12)CHARACTERFUNCTIONPRDUCE()CHARACTER*80BUFFERINTEGERNEXTSAVEBUFFER,NEXT//PRDUCE函数体所拥有的静态量BUFFER,NEXT(16)DATANEXT/81/(17)IF(NEXT.GT.80)THEN(18)READ(*,'(A)')BUFFER(19)NEXT=1(20)ENDIF(21)PRD

6、UCE=BUFFER(NEXT:NEXT)(22)NEXT=NEXT+1(23)END图10.5中描述了该程序中局部变量的静态存储位置:动态存储分配如果一个程序设计语言允许递归过程、可变数组或允许用户自由申请和释放空间,那么,就需要采用动态存储管理技术8.3栈式动态存储分配这种分配策略是将整个程序的数据空间设计为一个栈10.2栈式存储分配的实现过程的活动记录AR(ActivationRecord):是一段连续的存储区,用以存放过程的一次执行所需要的信息,这些信息如图10.6所示:临时工作单元:如计算表达式过程存放的中间结果局部变量:一个过程的局部变量机器状态

7、信息:如程序计数器、寄存器的值存取链:用以存取非局部变量控制链:指向调用该过程的那个过程的活动记录实参:由调用过程向该被调过程提供实参的值(或地址)返回地址:保存该被调过程返回后的地址一.简单的栈式存储分配的实现最简单的程序设计语言结构如图10.7所示:programmain;//主程序头全局变量或数组的说明;procR;//过程R的头…//过程R的体end(R);//过程R的尾procQ;//过程Q的头…//过程Q的体end(Q);//过程Q的尾主程序执行语句//主程序体end.(main)//主程序尾例如,图10.7的程序结构中,若主程序调用了过程Q,Q

8、又调用了R,在R进入运行后的存储结构如图10.8(a

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

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

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