- 1、本文档共27页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理优化和目标代码生成(2h)ppt课件
编译原理优化和目标代码生成(2h) 主讲:蒋伟进 教授 2007.03-05 7.2 执行时的内存分配 编译程序需要为源程序中的数据分配执行时的存储空间,编译程序从操作系统中申请编译程序计算出的所需的内存,或编译程序生成在运行时需申请内存的指令。 (1) 确定用来表示某一数据项的内存大小。 (2) 使用适当的内存分配策略,实现具体数 据的作用域和生存期。 (3) 确定以适当的算法访问生存期内的数据,包括基本型数据结构构造类型。 为目标程序分配执行时所需的存储空间: 一种是在目标程序运行前,由编译程序为数据结构分配存储空间,在程序的执行期间不再分配和解除这种内存分配。叫做静态存储分配。 一种在程序运行期间均可以对内存实现分配或解除分配,一旦存储分配解除该存储空间内的数据便失去意义。叫做动态存储分配。 例: int arr[10000]; void Binky() { int i; for (i=0; i 10000; i++) arr[i] = 1; } int arr[10000]; void Winky() { register int *p; for (p = arr; p arr + 10000; p++) *p = 1; } 目标: 作为一个高级语言的使用者很希望编译程序所产生的代码能够和直接用机器语言编写的程序效果一样好。 代码优化是指对原代码进行的变换,从而获得在时间和空间上效率相对高的程序,且一般也不是在时间和空间上最省的程序,在进行优化时应该做到: 1 代码的变换必须保持原程序的语义。 2 从理论上,变换加快了程序的速度。 3 这种变换是值得的 优化分类 按阶段分: 与机器无关的优化---对中间代码进行 依赖于机器的优化---对目标代码进行 根据优化所涉及的程序范围分成: (1)局部优化:(基本块)应用于仅包含少量语句的小程序的优化变换。 (2)循环优化:对循环中的代码进行优化 (3)全局优化:大范围的优化应用于一个程序单元,如一个函数或一个过程的优化变换。 程序的执行效率是可以通过在编译期间进行优化变换,不改变语义重写程序段以提高程序的工作效率。虽然变换的方法很多,但是常用的大致有以下几种: 1 编译求值 2 合并预算 3 删除死码 4 减少频率 5 强度削弱和变换循环条件 6 减少重写传播 局部优化: 所需要的开销相对较低,因此从优化所得到的收益也相对较低。 局部优化只是在较小的 程序段中进行优化,从而到达优化的目的。 这种程序段称为基本段。 全局优化: 要产生高效的代码,编译程序仅在基本块内优化是不够的,编译程序应把程序作为一个整体来考虑,对各个基本块的信息进行数据流的分析从而达到优化的目的。全局优化同局部优化相比,全局优化需要更多的分析,以便确定优化的可行性。 优化的原则 等价原则 有效原则 时间 空间 合算原则 优化的代价 效果 优化的基本方法 去处冗余 削减强度 使用更快的指令 局部优化 方法 合并已知量 临时变量改名 交换语句位置 代数变换 循环优化 代码外提 强度削弱 A=A+1 A++ 删除归纳变量 例如循环中加法变为,循环外乘法 窥孔优化 窥孔 目标程序中的一个可以移动的窗口 优化方法 冗余存取 不可到达代码 控制流优化 强度削弱 删除无用操作 目标机器的地址方式 例1:a:=b+c 1. MOV b, R0 ADD c, R0 cost=6 MOV R0, a 2. MOV b, a ADD c, a cost=6 假定R0, R1和R2中分别存放了a, b和c的地址, 采用: 3. MOV *R1, *R0 ADD *R2, *R0 cost=2 假定R1和R2中分别包含b和c的值, 并且b的值在这个赋值以后不再需要, 则还可有 4. ADD R2, R1 MOV R1, a cost=3 输入 中间代码 三元式 四元式 输出 可执行代码 待装配的代码 汇编代码 其他考虑 指令选择 RISC CISC 寄存器分配 通用寄存器方案 专用寄存器方案 大寄存器方案 介绍 懒编译策略 JIT编译技术 .net Java * 第七章 编译程序 7 . 1 编译程序考虑的因素 7 . 2 执行时的内存分配 7 . 3 代码优化 7.1 编译程序考虑的因素 编译程序设计时,除了需要用到前面介绍的分析技术和制导翻译外,还要考虑如何从源程序数据空间映射到具体物理存储空间,也就是运行时的数据表示。 在运行的时候如何组织或存放数据、在源程序中同名标识符是怎么样描述不同的对象、运行时的程序控制权是如何转移的,参数是如何传递以及如何生成质量较高的目
您可能关注的文档
最近下载
- 15、20年国民经济评价计算表.xls VIP
- 道路工程(国民经济评价计算表).xls VIP
- 南传密码(修订版).doc
- DJI大疆机甲大师 RoboMaster EP说明书 用户手册.pdf
- UML(WORD).pdf VIP
- 一氧化碳中毒急救与护理.ppt VIP
- 2024《企业并购中的商誉减值研究国内外文献综述与理论基础》6200字.docx
- 广州数控GSK GSK986G系列磨床数控系统使用手册2021年5月第1版样.pdf
- 深圳市城市轨道交通13号线二期工程(南延)环境影响报告书.pdf
- The_Greatest_Salesman_In_the_World(世界上最伟大的推销员)英文版.doc
文档评论(0)