编译技术 张莉第一部分-基础篇 电子教案-第6章-运行时的存储组织及管理.ppt

编译技术 张莉第一部分-基础篇 电子教案-第6章-运行时的存储组织及管理.ppt

ID:51965777

大小:830.50 KB

页数:39页

时间:2020-03-26

编译技术 张莉第一部分-基础篇 电子教案-第6章-运行时的存储组织及管理.ppt_第1页
编译技术 张莉第一部分-基础篇 电子教案-第6章-运行时的存储组织及管理.ppt_第2页
编译技术 张莉第一部分-基础篇 电子教案-第6章-运行时的存储组织及管理.ppt_第3页
编译技术 张莉第一部分-基础篇 电子教案-第6章-运行时的存储组织及管理.ppt_第4页
编译技术 张莉第一部分-基础篇 电子教案-第6章-运行时的存储组织及管理.ppt_第5页
资源描述:

《编译技术 张莉第一部分-基础篇 电子教案-第6章-运行时的存储组织及管理.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第六章运行时的存储组织及管理概述静态存储分配→动态存储分配→6.1概述(1)运行时的存储组织及管理目标程序运行时所需存储空间的组织与管理以及源程序中变量存储空间的分配。......c简单变量realb简单变量reala简单变量real符号表数据区例:reala,b,c;...a:=bc;取bc送a(2)静态存储分配和动态存储分配在编译阶段由编译程序实现对存储空间的管理和为源程序中的变量分配存储的方法。静态存储分配条件如果在编译时能够确定源程序中变量在运行时的数据空间大小,且运行时不改变,那么就可以采用静态存储分配方法。但是并不是所有数据空间大小都能在编译过程

2、中确定动态存储分配在目标程序运行阶段由目标程序实现对存储空间的组织与管理,和为源程序中的变量分配存储的方法。特点在目标程序运行时进行变量的存储分配。编译时要生成进行动态分配的目标指令。6.2静态存储分配(1)分配策略由于每个变量所需空间的大小在编译时已知,因此可以用简单的方法给变量分配目标地址。开辟一数据区。(首地址在加载时定)按编译顺序给每个模块分配存储空间。在模块内部按顺序给模块的变量分配存储,一般用相对地址,所占数据区的大小由变量类型决定。目标地址填入变量的符号表中。假设整数占4个字节大小,实数占8个字节大小,则符号表中各变量在数据区中所分配的地址为:例:

3、有下列FORTRAN程序段realMAXPRN,RATEintegerIND1,IND2realPRINT(100),YPRINT(5,100),TOTINT名字类型维数地址MAXPRNr0RATEr0IND1i0IND2i0PRINTr1YPRINTr2TOTINTr02642642722722802802842842882881088108850885088数据区+8×100+8×100×5(2)模块(FORTRAN子程序)的完整数据区·变量·返回地址·形式参数·临时变量FORTRAN子程序的典型数据区隐式参数区形式参数区局部变量和临时变量区模块n-1模块n

4、模块n+1隐式参数区:返回地址函数返回值形式参数区:存放相应实参信息(值或地址)6.3动态存储分配·编译时不能具体确定程序所需数据空间·编译程序生成有关存储分配的目标代码·实际上的分配要在目标程序运行时进行分程序结构,且允许递归调用的语言:栈式动态存储分配分配策略:整个数据区为一个堆栈,(1)当进入一个过程时,在栈顶为其分配一个数据区。(2)退出时,撤消过程数据区。例1:BBLOCK;REALX,Y;STRINGNAME;M1:PBLOCK(INTEGERIND);INTEGERX;CALLM2(IND+1);EDNM1;M2:PBLOCK(INTEGERJ);

5、BBLOCK;ARRAYINTEGERF(J);LOGICALTEST1;ENDENDM2;CALLM1(X/Y);END;1234(1)当进入一个过程时,在栈顶为其分配一个数据区。(2)退出时,撤消过程数据区。X,Y,NAME数据区AR1X和参数IND数据区AR2参数JAR3F,TEST1数据区AR41233274568活动记录运行中数据区的分配情况:X,Y,NAME数据区AR1(a)X,Y,NAME数据区AR1X和参数IND数据区AR2(b)X,Y,NAME数据区AR1X和参数IND数据区AR2参数JAR3(c)X,Y,NAME数据区AR1X和参数IND数据

6、区AR2参数JAR3F,TEST1数据区AR4(d)X,Y,NAME数据区AR1X和参数IND数据区AR2参数JAR3(e)X,Y,NAME数据区AR1X和参数IND数据区AR2(f)X,Y,NAME数据区AR1(g)BBLOCK;REALX,Y;STRINGNAME;M1:PBLOCK(INTEGERIND);INTEGERX;CALLM2(IND+1);ENDM1;M2:PBLOCK(INTEGERJ);BBLOCK;ARRAYINTEGERF(J);LOGICALTEST1;END;ENDM2;CALLM1(X/Y);END12346.3.1活动记录一个典

7、型的活动记录可以分为三部分:局部数据区参数区display区(1)局部数据区:存放模块中定义的各个局部变量。(2)参数区:存放隐式参数和显式参数。形参数据区prevabpretaddrretvalue参数区显式参数区(出现在用户源程序中)隐式参数区(不出现在用户源程序中)retaddr:返回地址,即调用语句的下一条执行指令地址prevabp:存放调用模块记录基地址,函数执行完时,释放其数据区,数据区指针指向调用前的位置retvalue:函数返回值(无值则空)形参数据区:每一形参都要分配数据空间,形参单元中存放实参值或者实参地址(3)display区:存放各外层模

8、块活动记录的基地址。变量

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

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

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