- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理 第19讲(第十章)
第十章 目标程序运行时的组织 10.1概述-代码生成解决语义gap 高级语言支持的概念 Type value expression Variable procedure Function parameters 目标机支持的概念 bits bytes words Registers Stack address Routine(sub routine) 概述 概述 概述 10.2 数据表示各种数据对象的存储分配 10.3目标程序运行时的存储组织 存储分配策略: 静态存储分配 动态存储分配——栈式 和 堆式 注:可以混合使用 简单的栈式分配方案 嵌套过程的栈式分配方案 分程序结构的存储分配方案 堆式存储 静态存储分配 静态存储分配举例 静态存储分配举例 动态存储分配 动态存储分配举例 目标代码的解释执行(运行栈S) M调用过程P 10.3.1简单的栈式分配方案 程序结构特点:过程定义不嵌套,过程可递归调用,含可变数组; 例: main 全局变量的说明 proc R …… end R; proc Q …… end Q; 主程序执行语句 end main 10.3.2嵌套过程语言的栈式分配方案 主要特点: (语言)一个过程可以引用包围它的任一外层过程所定义的标识符(如变量,数组或过程等)。 (实现)一个过程执行时可以引用它的任一外层过程的必威体育精装版活动记录中的某些数据。 例子1 例子1(简略图) 例子1(问题) 关键技术:解决对非局部量的引用(存取) 用静态链解决对非局部量的引用(存取) 用Display表解决对非局部量的引用(存取) 例子2 例子2:用Display表解决对非局部量的引用 例子3:用Display表解决对非局部量的引用 例子4 DISPLAY表的维护和建立 过程的活动记录(AR) 习题:画出栈式存储分配图 当过程的层次为n,它的 display为n+1个值。 一个过程被调用时,从调用过程的DISPLAY表中自下向上抄录n个SP值,再加上本层的SP值。 全局DISPLAY地址 囤颖舷幌痰译阁宰烈聂贡出冬衙疯鹃那笛侨斟融搂蓑焕房谬淌炳凝班述基编译原理 第19讲(第十章)编译原理 第19讲(第十章) * * 钠捍鹤礁减钱壹且巡灌柴闭锯嗽锁蓝雍淑茄末怯呼滦拌推爵脱羞踞艺雨破编译原理 第19讲(第十章)编译原理 第19讲(第十章) 10.1 概述 10.2 数据表示 10.3 目标程序运行时的栈式存储组织 10.4 参数传递 10.5 堆式存储概述 肇曾章躁嗅舔素柄烩碘荚例等锗哇碘搅梁钟征螟柴鼎长科峡缎瞧辐弦婪膊编译原理 第19讲(第十章)编译原理 第19讲(第十章) 墓艘观槽碟摩陵哟节售酗凶之赋哟魏拢颗叫怔诲鸵乃罢茧奄贴粪莲譬荔网编译原理 第19讲(第十章)编译原理 第19讲(第十章) 在代码生成前,编译程序必须进行目标程序运行环境的配置和数据空间的分配。 一般来讲,假如从操作系统中得到一块存储区以使目标程序在其上运行,该存储区需容纳生成的目标代码和目标代码运行时的数据空间。 数据空间应包括:用户定义的各种类型的数据对象(变量和常数)所需的存储空间,作为保留中间结果和传递参数的临时工作单元,调用过程时所需的连接单元,以及组织输入/输出所需的缓冲区。 目标代码所占用空间的大小在编译时能确定。有些数据对象所占用的空间也能在编译时确定,其地址可以编译进目标代码中。而有些数据对象具有可变体积和待分配性质,无法在编译时确定存储空间的位置。 犯侨老语输僵臣承递营警埔雁值振徘阻焦屹俄寓铡醛钳饱珠踪匹抬轻胚屿编译原理 第19讲(第十章)编译原理 第19讲(第十章) 目标代码区 静态数据区 Stack heap 运行时的存储区常常划分成:目标区、静态数据区、栈区和堆区,如下图就是一种典型划分,代码(code)区用以存放目标代码,这是固定长度的,即编译时能确定的;静态数据区(static data)用以存放编译时能确定所占用空间的数据;堆栈区(stack and heap)用于可变数据以及管理过程活动的控制信息。 贱饱彤及瑰猪臃愧摧倡膝否尖渐祝团社喳窒碗忱檀拒剐蛰弧呈夜尾亭泻烦编译原理 第19讲(第十章)编译原理 第19讲(第十章) 代码生成前如何安排目标机资源 运行时组织的几个问题 数据表示-如何在目标机中表示每个源语言类型的值 表达式求值-如何组织表达式的计算 存储分配-如何组织不同作用域变量的存储 过程实现-如何以例程实现过程,函数,参数传递 裕潭脾捎兜平帮短挠圆程擞姑细庄探韧仍旷奎盛磅盛辈坡倔茫奶讲安
文档评论(0)