编译技术课件-运行时的存储组织及管理.pptxVIP

编译技术课件-运行时的存储组织及管理.pptx

  1. 1、本文档共30页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
第六章 运行时的存储组织及管理概述静态存储分配→动态存储分配→数据区a简单变量realb简单变量realc简单变量real......6.1 概述(1) 运行时的存储组织及管理 目标程序运行时所需存储空间的组织与管理以及源程序中变量存储空间的分配。例:real a, b, c ; ... a := b?c ; 取b ? c 送a 符号表(2) 静态存储分配和动态存储分配静态存储分配 在编译阶段由编译程序实现对存储空间的管理和为源程序中的变量分配存储的方法。条 件 如果在编译时能够确定源程序中变量在运行时的数据空间大小,且运行时不改变,那么就可以采用静态存储分配方法。但是并不是所有数据空间大小都能在编译过程中确定动态存储分配 在目标程序运行阶段由目标程序实现对存储空间的组织与管理,和为源程序中的变量分配存储的方法。特 点 在目标程序运行时进行变量的存储分配。 编译时要生成进行动态分配的目标指令。6.2 静态存储分配(1) 分配策略 由于每个变量所需空间的大小在编译时已知,因此可以用简单的方法给变量分配目标地址。 开辟一数据区。(首地址在加载时定) 按编译顺序给每个模块分配存储空间。 在模块内部按顺序给模块的变量分配存储,一般用相对地址,所占数据区的大小由变量类型决定。 目标地址填入变量的符号表中。数据区r0272MAXPRN280r0272RATE284i0280IND1288i0284IND2+8×100r1288PRINT1088r21088YPRINTr05088+8×100×5TOTINT5088例:有下列FORTRAN 程序段 real MAXPRN, RATE integer IND1, IND2 real PRINT(100),YPRINT(5,100),TOTINT 假设整数占4个字节大小,实数占8个字节大小,则符号表中各变量在数据区中所分配的地址为:名字类型维数地址264264(2) 模块(FORTRAN子程序)的完整数据区· 变量· 返回地址· 形式参数· 临时变量模块n-1隐式参数区模块n形式参数区局部变量和临时变量区模块n+1FORTRAN子程序的典型数据区隐式参数区:返回地址 函数返回值形式参数区:存放相应实 参信息(值或地址)6.3 动态存储分配 · 编译时不能具体确定程序所需数据空间 · 编译程序生成有关存储分配的目标代码 · 实际上的分配要在目标程序运行时进行分程序结构,且允许递归调用的语言: 栈式动态存储分配分配策略:整个数据区为一个堆栈, (1) 当进入一个过程时,在栈顶为其分配一个数据区。 (2) 退出时,撤消过程数据区。(1)当进入一个过程时,在栈顶为其分配一个数据区。 (2)退出时,撤消过程数据区。AR1X,Y,NAME数据区AR4F,TEST1数据区AR3参数JAR2X和参数IND数据区11例1: BBLOCK; REAL X, Y; STRING NAME; M1: PBLOCK(INTEGER IND) ; INTEGER X; CALL M2(IND+1); EDN M1; M2: PBLOCK(INTEGER J); BBLOCK; ARRAY INTEGER F(J); LOGICAL TEST1; END END M2; CALL M1(X/Y); END; 22373344562活动记录8AR2AR2AR2AR2AR2X和参数IND数据区X和参数IND数据区X和参数IND数据区X和参数IND数据区X和参数IND数据区AR1AR4AR1AR3AR3AR1AR1AR1AR3AR1AR1参数J参数JX,Y,NAME数据区F,TEST1数据区X,Y,NAME数据区X,Y,NAME数据区参数JX,Y,NAME数据区X,Y,NAME数据区X,Y,NAME数据区X,Y,NAME数据区(a)(b)(c)1(d)(e)(f)BBLOCK; REAL X,Y; STRING NAME; M1: PBLOCK(INTEGER IND); INTEGER X; CALL M2(IND+1); END M1; M2: PBLOCK(INTEGER J); BBLOCK; ARRAY INTEGER F(J); LOGICAL TEST1; END ; END M2; CALL M1(X/Y);END2(g)34运行中数据区的分配情况:6.3.1 活动记录一个典型的活动记录可以分为三部分:局部数据区参数区display区(1) 局部数据区:存放模块中定义的各个局部变量。显式参数区(出现在用户源程序中)prev abp参数区ret addr隐式参数

文档评论(0)

极研教育 + 关注
官方认证
服务提供商

提供24考研全程班(数政英,专业课等)详情加v:JiYan-edu 公众号:极研教育

认证主体天津西青区极研智慧智能科技有限公司
IP属地天津
统一社会信用代码/组织机构代码
91120111MA07276K52

1亿VIP精品文档

相关文档

相关课程推荐