第十章 代码优化

优化:指对程序进行等价变换,使得从变换后的程序出发,能生成更有效的目标代码。

  • 前端优化:在目标代码生成以前,对语法分析后的目标代码进行优化
  • 后端优化:在生成目标代码时进行优化,依赖于具体的计算机指令系统

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. 【编译原理】中间代码优化(三) 循环优化

    文章目录 循环优化概述. 计算必经节点集. 循环查找算法. 1.查找回边. 2.查找循环. 代码外提. 强度削弱. 删除归纳变量. 循环优化概述. 什么叫做循环?循环就是程序中那些可能反复执行的代码序 ...

  2. 【编译原理】中间代码优化(二) 局部优化

    预备知识简述. 对于一个给定的程序,我们可以把它划分为一系列的基本块.在各个基本块范围内,分别进行优化.局限于基本块范围内的优化称为基本块内的优化,或者称为局部优化. 所谓基本块,是指程序中一个顺序执 ...

  3. 【编译原理】中间代码优化(一) 优化技术大观

    代码优化概述. 通过对程序进行等价变换,使得从变换后的程序出发,能够生成更加有效的目标代码,这种变换我们叫做优化. 优化其实可以在编译的各个阶段进行,但最主要的一类优化是在目标代码生成以前,对语法分析 ...

  4. 编译原理(8):代码优化

    声明:本系列文章,是根据中国大学MOOC网 哈工大的编译原理 这门课学习而成的学习笔记. 一.流图 基本块(Basic Block) 基本块是满足下列条件的最大的连续三地址指令序列 控制流只能从基本块 ...

  5. 【编译原理】计算机考研复试问答题总结

    [编译原理]计算机考研复试问答总结 因为复试专业课需要考编译原理,线上复试总结一些编译原理的相关题目~ (ps:只是一些面试的一些概念简答题,如果有笔试相关类型的题目要好好写) 第一章 编译概述 Q1 ...

  6. 《OpenMP编译原理及实现技术》摘录

    内容摘自<OpenMP编译原理及实现技术>第2章 代码测试环境:Windows7 64bit, VS2010, 4核机. 可以说OpenMP制导指令将C语言扩展为一个并行语言,但OpenM ...

  7. 添物 不花钱学计算机及编程(预备篇)— 编译原理

    编译原理是将一门语言翻译为另一门语言的学科.如果您只是想当个简单的程序员是可以不用学习的,或者有个了解就可以.但是如果您想更好的发展,就要很好的掌握了. 这门课程最大的特色就是,要自己写代码学习,不能 ...

  8. 0909 编译原理1

    通过上网查找资料后,我对编译原理这门课程有了一定的了解. 1.编译原理旨在介绍编译程序构造的一般原理和基本方法.内容包括语言和文法.词法分析.语法分析.语法制导翻译.中间代码生成.存储管理.代码优化和 ...

  9. 关于编译原理的一点看法

    编译原理就是什么? 编译原理是将高级语言翻译成计算机语言(即计算机所能识别的二进制代码)所遵循的规律,让电脑可以懂得高级语言所表达的东西,内容包括语言和文法.词法分析.语法分析.语法制导翻译.中间代码 ...

最新文章

  1. Linux真随机数的生成
  2. windows subsystem for linux
  3. Symantec防病毒企业版10.1部署方法一
  4. 对于自绝对父相的理解
  5. c++ vector用另一个vector初始化
  6. java 读写分离 mvc_spring MVC、mybatis配置读写分离
  7. 【git】git如何添加本地不是git的项目到Git库中
  8. python values count_使用Python Pandas从数据框中获取总values_count
  9. Java数据结构-约瑟夫问题(Joseph环)
  10. 推荐Python、Django中文文档地址
  11. 台式计算机如何自动关机,台式电脑如何设置定时关机
  12. 2018年海峡两岸光电展将在台北举办
  13. 年终总结--时光如水,生命如歌
  14. Java实现扑克牌游戏(简易炸金花)
  15. hacking8信息流邀请码第二关 代码详解
  16. 华为手机灵敏度设置_华为手机吃鸡灵敏度怎么调
  17. Version in “./docker-compose.yml“ is unsupported.
  18. nps服务器安装教程
  19. Vue电商项目—数据统计—数据报表模块-11
  20. 现代卷积神经网络(NiN),并使用NIN训练CIFAR10的分类

热门文章

  1. 关于易school的使用体验
  2. 绘制四叶玫瑰线matlab,数学实验_word文档在线阅读与下载_文档网
  3. 工程建设业主企业数字化管理解决方案
  4. Windows——系统盘重置密码
  5. error during connect: Get http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.28/version: open //./pipe/docker_
  6. Universal-Image-Loader(UIL) 源码详解
  7. 苹果5壁纸_iOS14.2 beta4描述文件下载-苹果iOS14.2测试版Beta4描述文件官方更新文件下载 v1.0...
  8. web前端之sass简介
  9. 头像叠加android_Android自定义ViewGroup实现堆叠头像的点赞Layout
  10. python字典和集合对象可以进行索引操作吗_python 集合(set)和字典(dictionary)的用法解析...