- 1、本文档共31页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
优化和目代码生成
编译原理优化和目标代码生成(2h) 主讲:王海文 2005-2007 7.2 运行时的内存分配 编译程序需要为源程序中的数据分配执行时的存储空间,编译程序从操作系统中申请编译程序计算出的所需的内存,或编译程序生成在运行时需申请内存的指令。 (1) 确定用来表示某一数据项的内存大小。 (2) 使用适当的内存分配策略,实现具体数 据的作用域和生存期。 (3) 确定以适当的算法访问生存期内的数据,包括基本型数据结构构造类型。 为目标程序分配执行时所需的存储空间: 一种是在目标程序运行前,由编译程序为数据结构分配存储空间,在程序的执行期间不再分配和解除这种内存分配。叫做静态存储分配。 一种在程序运行期间均可以对内存实现分配或解除分配,一旦存储分配解除该存储空间内的数据便失去意义。叫做动态存储分配。 代码优化在整个编译过程的位置 设计和实现编译程序代码优化的原则: (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 删除死码 4 减少频率 5 强度削弱和变换循环条件 6 减少重写传播 局部优化: 所需要的开销相对较低,因此从优化所得到的收益也相对较低。 局部优化只是在较小的 程序段中进行优化,从而到达优化的目的。 这种程序段称为基本段。 全局优化: 要产生高效的代码,编译程序仅在基本块内优化是不够的,编译程序应把程序作为一个整体来考虑,对各个基本块的信息进行数据流的分析从而达到优化的目的。全局优化同局部优化相比,全局优化需要更多的分析,以便确定优化的可行性。 优化的基本方法 去处冗余 削减强度 使用更快的指令 局部优化 方法 合并已知量 临时变量改名 交换语句位置 代数变换 循环优化 代码外提 强度削弱 A=A+1 A++ 删除归纳变量 例如循环中加法变为,循环外乘法 窥孔优化 窥孔 目标程序中的一个可以移动的窗口 优化方法 冗余存取 不可到达代码 控制流优化 强度削弱 删除无用操作 输入 中间代码 三元式 四元式 输出 可执行代码 待装配的代码 汇编代码 目标程序 绝对机器代码,程序所有的内存地址,特别是程序的起始地址,在编译时都已经固定。这种代码的优点是装入机器后就可以立即执行,对于小程序可以快速编译和运行。 可重定位机器代码(可重定位目标模块),代码装入内存的起始地址可以任意改变。一组可重定位的若干目标模块,经过连接和装配后才可以运行。尽管这些工作增加了程序运行的代价,但是,可重定位机器代码的优点是灵活性。这种技术允许程序分模块编写,独立地编译成目标模块,并且从目标模块库中调用其它已经编译好的模块,便于程序开发。通常,可重定位机器代码中包含可重定位信息和连接信息。 如果目标代码是汇编语言程序,还需要汇编后才能运行。只要地址可以由偏移址及符号表中的其它信息计算得到,代码生成器就可以产生程序中名字的绝对地址或可重定位地址。这样生成代码的好处是不用生成二进制的机器代码,而是产生符号指令并用宏机制来帮助产生机器代码,使得代码生成过程变得容易。 为了可读性,采用汇编语言作为目标语言。 指令选择 一个编译程序可以看成是一个转换系统,它把源程序转换成等价的目标代码,也就是说,对源语言种各种语言结构,依据语义确定相应的目标代码结构,即确定源语言于目标语言之间的对应关系,确保正确实现语义。显然,能否建立这样的关系直接影响到编译程序的质量。 目标机器指令系统的性质决定了指令选择的难以程度,指令系统的一致性和完备性直接影响到这种对应关系的建立。
您可能关注的文档
- 人力资源划(一).ppt
- 亨达皮鞋品策略报告.ppt
- 人力资源划(二).ppt
- 人力资源划(范例版).ppt
- 人力资源外商如何铸造竞争力.ppt
- 人力资源位体系建设.ppt
- 人力资源划(一).ppt
- 人力资源年度工作计划PT(模板).ppt
- 人力资源精品讲义动合同法.ppt
- 人力资源略总体思路.ppt
- 2024高考物理一轮复习规范演练7共点力的平衡含解析新人教版.doc
- 高中语文第5课苏轼词两首学案3新人教版必修4.doc
- 2024_2025学年高中英语课时分层作业9Unit3LifeinthefutureSectionⅢⅣ含解析新人教版必修5.doc
- 2024_2025学年新教材高中英语模块素养检测含解析译林版必修第一册.doc
- 2024_2025学年新教材高中英语单元综合检测5含解析外研版选择性必修第一册.doc
- 2024高考政治一轮复习第1单元生活与消费第三课多彩的消费练习含解析新人教版必修1.doc
- 2024_2025学年新教材高中英语WELCOMEUNITSectionⅡReadingandThi.doc
- 2024_2025学年高中历史专题九当今世界政治格局的多极化趋势测评含解析人民版必修1.docx
- 2024高考生物一轮复习第9单元生物与环境第29讲生态系统的结构和功能教案.docx
- 2024_2025学年新教材高中英语UNIT5LANGUAGESAROUNDTHEWORLDSect.doc
最近下载
- 基于UML的大学图书馆图书信息管理系统设计实验.docx VIP
- 推土机安全作业操作规程技术交底培训.pptx VIP
- BYK技术手册_润湿分散剂.pdf
- 最新GBT20647.9物业服务管理体系一整套文件(手册+程序文件+管理制度+表单).pdf
- 关于续签2017年度物业管理服务项目合同的请示1-12月-.doc VIP
- 一例二型糖尿病患者个案护理.pptx
- 幼儿教育课题申报书:《幼儿劳动养成教育的培养研究》.docx
- 2022年道德与法治新课标《义务教育道德与法治课程标准(2022年版)》解读PPT课件.pptx VIP
- 五年级上册平行四边形的面积说课之课件.ppt
- 房屋装修监管难痛点与策略.doc
文档评论(0)