- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
f41[计算机]编译原理课程设计之第七章 运行时环境
课程内容 第一章 概论 第二章 词法分析 第三章上下文无关文法及分析 第四章自上而下的语法分析 第五章自下而上的语法分析 第六章语义分析 第七章运行时环境 第八章代码生成 当源程序的目标代码被运行时,在内存中不仅有目标代码,而且还要保存各种信息,如必须为源程序中所出现的一些量(常量、变量及某些数组等)分配运行时的存储空间。即编译器要从操作系统得到一块存储区,用于被编译过的目标程序的运行。 存储分配是在运行阶段进行的,但编译程序在编译阶段要为其设计好存储组织形式,并将这种组织形式通过生成的目标代码体现出来。(举例说明:函数调用分析.txt) 目标代码运行时,存储空间的组织称为目标代码的运行时环境。 运行时环境有三个类型:完全静态环境(fully static environment)、基于栈的环境(stack-based environment),以及完全动态环境(fully dynamic environment)。这3种类型的混合形式也是可能的。 代码区域:目标代码的存储区域,由于代码区在执行之前是固定的,所以在编译时所有目标代码的地址都是可计算的; 全程/静态区域:静态数据区用来存放那些具有绝对地址的数据和变量(如静态变量和全程变量);编译器可以确定其所占用存储空间的大小; 栈区:在运行时分配存储空间的数据就分配在栈区;编译器知道存在栈中的具体数据大小和存活时间; 堆区:供用户动态申请存储空间,编译器不需要知道究竟得从heap中分配多少空间,也不需要知道从heap上分配的空间究竟需要存在多久。 由于栈区和堆区的长度会随着目标代码的运行而变化,因此把它们分配在数据区的两端。一般情况下,栈向下长,堆向上长,可以使栈和堆共用一空白存储空间。 在PASCAL,C语言中,通常采用以过程为单位的动态存储分配方案: 当一过程(函数)被调用时,就在栈顶为该过程分配所需的数据空间(过程活动记录),当一个过程工作完毕返回时,它在栈顶的数据空间(过程活动记录)也即释放。 过程的活动记录(activation record,AR)是一段连续的存储区,用于存放过程的一次执行所需要的信息,当调用或激活过程或函数时,必须为被调用过程的活动记录分配空间。 活动记录存放的信息至少应包括以下几个部分: 在完全静态环境中,不仅全局变量,所有的变量都是静态分配,即整个程序所需数据空间的总量在编译时是完全确定的,从而每个数据名的地址就可静态地进行分配,适于静态分配的语言,要求满足的条件是: 每个数据名所需的存储空间的大小都是常量 不允许采用动态的数据结构,即在程序运行过程中申请或释放的数据结构 过程不可递归调用 程序所需的数据空间在程序运行前就可确定,称为_______管理技术。 静态存储 动态存储 栈式存储 堆式存储 静态存储分配允许程序出现_______。 递归过程 可变体积的数据项目 静态变量 待定性质的名字 在一个所有过程都是全局的、过程定义不允许嵌套,但允许过程的递归调用的程序设计语言(例如C语言)中,基于栈的动态运行时环境有两个指针: sp:栈顶部(top of stack)指针;对于x86系统来说,它采用sp或esp寄存器存储栈顶部的地址; fp(frame point)指向当前活动记录的控制链的指针,对于x86系统,它采用bp或ebp寄存器存储当前活动记录的控制链的地址,其作用如下: 1.通过该指针可以访问当前执行函数的局部变量; 2.通过该指针可以访问主调程序的活动记录; 3.允许在当前的被调函数执行完毕时,用它来恢复主调函数的活动记录。 目标代码的生成必须支持变量和临时变量的实际定位,并增加支持运行时环境所必需的代码。 对名字的访问 如何处理可变长度的问题 局部临时变量 嵌套声明 在没有局部过程的基于栈的运行时环境中,所有的非局部的名字都是全局的,因此也就是静态的,都具有一个固定的静态地址,可以被直接访问。 对函数参数和局部变量而言,在大多数的语言中,每个局部声明的偏移量仍是可有编译程序静态地计算出来,因为过程的声明在编译时是固定的,而且为每个声明分配的存储器大小也根据其数据类型而固定。 目标代码的生成必须支持变量和临时变量的实际定位,并增加支持运行时环境所必需的代码。 对名字的访问 如何处理可变长度的问题 局部临时变量 嵌套声明 目标代码的生成必须支持变量和临时变量的实际定位,并增加支持运行时环境所必需的代码。 对名字的访问 如何处理可变长度的问题 局部临时变量 嵌套声明 考虑C表达式: x[i]=(i+j)*(i/k+f(j)) 在这个表达式从左到右的求值计算中,在对f的调用过程中需要保存中间结果: x[i]的地址、i+j的和、i/k的商。 这些中间值可计算到寄存器中,根据寄存器进行保存和恢复;或者可将它们作为临时变量存储
您可能关注的文档
- lf3[计算机]蒙太奇.doc
- rna[生活娱乐]幼儿安全知识题库.doc
- ifh[思想汇报]《建党伟业》影评:不学近代史看不懂片子.doc
- ew0[应用文书]应用写作.ppt
- 5ks[外语学习]新闻标题中的的节缩词.doc
- ifa[经济学]教你与客户成交的24种技巧.doc
- ov4[教育学]人工耳蜗的植入条件与过程.ppt
- dus[应用文书]blisher_2003应用概述.ppt
- vdv[中考英语]初中英语作文写作.doc
- agp[英语四六级]英语四级实用短语.doc
- 保险机构客户体验优化:2025年客户分层与精准服务模式研究.docx
- 2025年智能手表在儿童教育领域的应用开发可行性及安全性研究.docx
- 数字藏品市场投资潜力与风险防控白皮书.docx
- 基于2025年法律法规的电商平台跨境进口业务合规性研究报告.docx
- 数字孪生技术在金属加工车间制造过程监控中的应用研究.docx
- 2025年爱马仕手工工艺传承与消费者忠诚度研究报告.docx
- 2025年零售行业全渠道运营数字化转型路径研究报告.docx
- 2025年银发群体出行安全适老化产品创新趋势研究报告.docx
- 基于2025年的生物制药研发项目可行性分析与产业创新驱动.docx
- 低空经济对航空产业链上下游企业的影响报告.docx
最近下载
- 2025云南怒江州福贡县义务教育教师专项招聘65人笔试备考试题及答案解析.docx VIP
- 第3课+中古时期的西欧【中职专用】《世界历史》(高教版2023基础模块).pptx VIP
- B16.36-2020 孔板法兰 中文版.pdf
- 混凝土排水管道基础及接口.docx VIP
- 新苏教版科学四年级上册全册单元思维导图.docx
- 河南省2025届高三新未来九月大联考2024-2025学年高三上学期开学数学试题(原卷版).docx VIP
- 中华人民共和国消防法培训PPT课件.pptx VIP
- 白皮书TOGAF标准第10版简介.pdf
- GBT 11062-2014 天然气 发热量、密度、相对密度和沃泊指数的计算方法.docx VIP
- 2025青海海北州海晏县招聘政府雇员22人考试备考题库及答案解析.docx VIP
文档评论(0)