编译原理 第十章 代码优化
第十章 代码优化
优化:指对程序进行等价变换,使得从变换后的程序出发,能生成更有效的目标代码。
- 前端优化:在目标代码生成以前,对语法分析后的目标代码进行优化
- 后端优化:在生成目标代码时进行优化,依赖于具体的计算机指令系统
10.1 概述
优化原则:
- 等价原则:经过优化的代码不应改变程序运行的结果
- 有效原则: 有效原则:使优化后所产生的目标代码运行时间较短,占用的存储空间较小
- 合算原则:应尽可能以较低的代价取得较好的优化效果
10.2局部优化
10.2.1 基本块和流图
- 基本块:指程序中一段顺序执行的语句序列,其中只有一个入口和一个出口,入口就是其中的第一条语句,出口是其中最后一条语句
基本块的划分方法
- 流图: 一基本快为节点,通过有向图表示
一个基本块的入口语句是程序的第一条语句,则此结点为首结点
10.2.2 基本快的DAG表示及优化
基本块的DAG
过程叙述起来挺麻烦的,但是实际执行挺简单的:
这里对b重新赋值了,生成附加y的节点的时候,不能用n2,而是要用新生成的,标号更大的n4.因此,在搜索 标号b的时候要从后向前搜索。
DAG图中的数组处理
a[i] 为右值时, 将 a [] j 拆开
当 a[i] 为左值,对 a[i]赋值的时候,将a[i]看作是一个整体。
编译原理 第十章 代码优化相关推荐
- 【编译原理】中间代码优化(三) 循环优化
文章目录 循环优化概述. 计算必经节点集. 循环查找算法. 1.查找回边. 2.查找循环. 代码外提. 强度削弱. 删除归纳变量. 循环优化概述. 什么叫做循环?循环就是程序中那些可能反复执行的代码序 ...
- 【编译原理】中间代码优化(二) 局部优化
预备知识简述. 对于一个给定的程序,我们可以把它划分为一系列的基本块.在各个基本块范围内,分别进行优化.局限于基本块范围内的优化称为基本块内的优化,或者称为局部优化. 所谓基本块,是指程序中一个顺序执 ...
- 【编译原理】中间代码优化(一) 优化技术大观
代码优化概述. 通过对程序进行等价变换,使得从变换后的程序出发,能够生成更加有效的目标代码,这种变换我们叫做优化. 优化其实可以在编译的各个阶段进行,但最主要的一类优化是在目标代码生成以前,对语法分析 ...
- 编译原理(8):代码优化
声明:本系列文章,是根据中国大学MOOC网 哈工大的编译原理 这门课学习而成的学习笔记. 一.流图 基本块(Basic Block) 基本块是满足下列条件的最大的连续三地址指令序列 控制流只能从基本块 ...
- 【编译原理】计算机考研复试问答题总结
[编译原理]计算机考研复试问答总结 因为复试专业课需要考编译原理,线上复试总结一些编译原理的相关题目~ (ps:只是一些面试的一些概念简答题,如果有笔试相关类型的题目要好好写) 第一章 编译概述 Q1 ...
- 《OpenMP编译原理及实现技术》摘录
内容摘自<OpenMP编译原理及实现技术>第2章 代码测试环境:Windows7 64bit, VS2010, 4核机. 可以说OpenMP制导指令将C语言扩展为一个并行语言,但OpenM ...
- 添物 不花钱学计算机及编程(预备篇)— 编译原理
编译原理是将一门语言翻译为另一门语言的学科.如果您只是想当个简单的程序员是可以不用学习的,或者有个了解就可以.但是如果您想更好的发展,就要很好的掌握了. 这门课程最大的特色就是,要自己写代码学习,不能 ...
- 0909 编译原理1
通过上网查找资料后,我对编译原理这门课程有了一定的了解. 1.编译原理旨在介绍编译程序构造的一般原理和基本方法.内容包括语言和文法.词法分析.语法分析.语法制导翻译.中间代码生成.存储管理.代码优化和 ...
- 关于编译原理的一点看法
编译原理就是什么? 编译原理是将高级语言翻译成计算机语言(即计算机所能识别的二进制代码)所遵循的规律,让电脑可以懂得高级语言所表达的东西,内容包括语言和文法.词法分析.语法分析.语法制导翻译.中间代码 ...
最新文章
- Linux真随机数的生成
- windows subsystem for linux
- Symantec防病毒企业版10.1部署方法一
- 对于自绝对父相的理解
- c++ vector用另一个vector初始化
- java 读写分离 mvc_spring MVC、mybatis配置读写分离
- 【git】git如何添加本地不是git的项目到Git库中
- python values count_使用Python Pandas从数据框中获取总values_count
- Java数据结构-约瑟夫问题(Joseph环)
- 推荐Python、Django中文文档地址
- 台式计算机如何自动关机,台式电脑如何设置定时关机
- 2018年海峡两岸光电展将在台北举办
- 年终总结--时光如水,生命如歌
- Java实现扑克牌游戏(简易炸金花)
- hacking8信息流邀请码第二关 代码详解
- 华为手机灵敏度设置_华为手机吃鸡灵敏度怎么调
- Version in “./docker-compose.yml“ is unsupported.
- nps服务器安装教程
- Vue电商项目—数据统计—数据报表模块-11
- 现代卷积神经网络(NiN),并使用NIN训练CIFAR10的分类
热门文章
- 关于易school的使用体验
- 绘制四叶玫瑰线matlab,数学实验_word文档在线阅读与下载_文档网
- 工程建设业主企业数字化管理解决方案
- Windows——系统盘重置密码
- error during connect: Get http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.28/version: open //./pipe/docker_
- Universal-Image-Loader(UIL) 源码详解
- 苹果5壁纸_iOS14.2 beta4描述文件下载-苹果iOS14.2测试版Beta4描述文件官方更新文件下载 v1.0...
- web前端之sass简介
- 头像叠加android_Android自定义ViewGroup实现堆叠头像的点赞Layout
- python字典和集合对象可以进行索引操作吗_python 集合(set)和字典(dictionary)的用法解析...