欢迎来到天天文库
浏览记录
ID:62178524
大小:573.50 KB
页数:40页
时间:2021-04-20
《最新编译原理-第9章分析课件PPT.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、编译原理-第9章分析第九章 运行时存储空间组织9.1目标程序运行时的活动(略)9.2运行时存储器的划分9.3静态存储分配(略)9.4简单的栈式存储分配9.5嵌套过程语言的栈式实现9.6堆式动态存储分配9.2运行时存储器的划分一、运行时存储器的划分1.编译器需要在存储区保护的对象(1)目标代码编译时可确定,故可放在一个静态确定的区域(2)数据对象部分数据对象的大小在编译时可确定,故也可放在一个静态确定的区域(3)跟踪过程活动的控制栈目标代码静态数据栈↓↑堆9.2运行时存储器的划分三、存储分配策略1.静态存储分配策略在编译时对所有数据对象分配
2、固定的存储单元,且在运行时始终保持不变。2.栈式动态分配策略在运行时把存储器作为一个栈进行管理,运行时,每当调用一个过程,它所需要的存储空间就动态地分配于栈顶,一旦退出,它所占空间就予以释放。3.堆式动态分配策略在运行时把存储器组织成堆结构,以便用户关于存储空间的申请与归还(回收),凡申请者从堆中分给一块,凡释放者退回给堆.9.4简单的栈式存储分配1.前提:假设程序语言无分程序结构,过程定义不允许嵌套,但允许过程的递归调用。例如:C语言2.过程:运行时每当进入一个过程——即一个新的活动开始,就把其它活动记录压入栈(置于栈顶),从而形成过程工作
3、时的数据区.当活动结束——即过程退出时,再把其活动记录弹出栈,这样,它在栈顶上的数据区也随即不复存在.3.举例(1)主程序调用过程Q,而Q又调用R,在R进入运行后的存储结构.9.4简单的栈式存储分配R的活动记录Q的活动记录Main的活动记录全局数据SPTOP静态分配3.举例(2)主程序调用过程Q,Q递归调用自己,在Q过程第二次进入运行后的存储结构.9.4简单的栈式存储分配Q2的活动记录Q1的活动记录Main的活动记录全局数据9.4简单的栈式存储分配3.举例(3)主程序先调用过程Q,然后主程序调用R,且过程Q不调用Q和R.R的活动记录Main的
4、活动记录全局数据4.指示器SP——总是指向现行过程活动记录的起点,用于访问局部数据.指示器TOP——始终指向(已占用)栈顶单元.9.4简单的栈式存储分配一、C的活动记录1.C的活动记录的项目(1)连接数据——A.老SP值:即前一活动记录的地址B.返回地址(2)参数个数(3)形式单元——存放实在参数的值或地址(4)过程的局部变量——数组内情向量——临时工作单元临时工作单元内情向量简单变量形式单元参数个数返回地址老SPTOPSP9.4简单的栈式存储分配2.(1)不允许过程嵌套——非局部量仅能出现在源程序头,可采用静态存储分配,编译时可确定其地址(
5、2)局部变量或形参在活动记录中的位置确定即对它们都分配了存储单元,其地址是相对于活动记录的基地址SP的绝对地址=活动记录基地址+相对地址变址访问X[SP]X——代表相对数,即相对于活动记录起点的地址,编译时可完全确定下来.9.4简单的栈式存储分配二、C的过程调用,过程进入、数组空间分配和过程返回已知过程调用的四元式序列为:parT1…parTncallP,n9.4简单的栈式存储分配C语言过程调用与返回ParTi(i+3)[TOP]:=Ti(传值)或(i+3)[TOP]:=addr(Ti)(传地址)CallP,n1[TOP]:=SP3[TO
6、P]:=nJSRP(转P)SP:=TOP+11[SP]:=返回地址TOP:=TOP+活动单元数Return(E)TOP:=SP-1SP:=0[SP]X:=2[TOP]UJ0[x]/*UJ:无条件转移*/9.5嵌套过程语言的栈式实现前提:假定允许过程定义嵌套,如Pascal语言,但去掉Pascal中的“文件。程序举例:——课本P258图9.15一、非局部名字的访问的实现9.5嵌套过程语言的栈式实现1.静态链和活动记录A.静态链——活动记录的一个域,从一个过程的当前活动记录指向其静态直接外层的最新活动记录。动态链——活动记录一个域,从一个过程的当
7、前活动记录指向调用该过程前正在运行的过程的最新的活动记录的基地址。B.活动记录结构——P259图9.16C.程序运行时栈的变化过程——举例:ib(形参)1(形参个数)0返回地址5ic00返回地址0xa0返回地址0ic0(形参个数)0返回地址0xa0返回地址0过程S中调用Q时161514131211109876543210SPTOPTOPSP109876543210过程P中调用S时dcv(形参)u(形参)2(形参个数)11返回地址11ib(形参)1(形参个数)0返回地址5ic00返回地址0xa0返回地址0TOPSP121110987654321
8、0242322212019181716151413过程Q中调用R时dcvu211返回地址17dcv(形参)u(形参)2(形参个数)11返回地址11ib(形参)1(形
此文档下载收益归作者所有