美文网首页
编译原理系列之十 代码优化

编译原理系列之十 代码优化

作者: getianao | 来源:发表于2018-12-25 14:42 被阅读0次

代码优化

  • 代码优化可分为与机器有关的优化和与机器无关的优化。

    与机器有关的优化一般在目标代码上进行。与机器无关的优化一般在中间代码上进行。

  • 代码优化也可分为局部优化、 循环优化和全局优化:

    局部优化指的是在只有一个入口、 一个出口的基本程序块上进行的优化。
    循环优化是对循环中的代码进行的优化,在一个程序运行时,相当多的一部分时间会花在循环上,因此,基于循环的优化非常重要。
    全局优化是在整个程序范围内进行的优化。

  • 常用的代码优化技术 :

    1. 删除公共子表达式(删除多余运算)

      删除公共子表达式
  1. 代码外提
    代码外提是指将循环中的不变运算提到循环体前面。


    代码外提
  2. 强度削弱

    强度削弱是指用执行效率较高的操作等价地替换原操作。

    比如将乘法改成加法

    强度削弱
  1. 变换循环控制条件(删除归纳变量)

    删除归纳变量
  1. 合并已知变量

    合并已知变量
  1. 复写传播

    复写传播是指尽量不引用那些在程序中仅仅只传递信息而不改变其值,也不影响其运行结果的变量。


    复写传播
  2. 删除无用赋值


    删除无用赋值
  • 基本块的划分:

    基本块:是指程序中一顺序执行的语句序列,其中只有一个入口语句和一个出口语句。执行时只能从其入口语句进入,从其出口语句退出,不存在跳转和分叉汇合的情况。

    基本块入口语句的判断:
    • 程序的第一个语句;
    • 条件转移语句或无条件转移语句的转移目标语句
    • 紧跟在条件转移语句后面的语句

  • 流图:

    流图以基本块集为结点集:第一个结点为含有程序第一条语句的基本块;

    流图
  • DAG 表示的代码优化分析

    所作的优化合并已知量、删除多余运算、删除无用赋值

    DAG 表示的代码优化分析
  • 循环优化:

    对循环中的代码段,可以进行代码外提、强度削弱和删除归纳变量等优化。

相关文章

  • 编译原理系列之十 代码优化

    代码优化 代码优化可分为与机器有关的优化和与机器无关的优化。与机器有关的优化一般在目标代码上进行。与机器无关的优化...

  • 编译原理四——代码优化

    代码优化 代码优化的含义是:对代码进行等价变换,使得变换后的代码具有更高的时间效率和空间效率。代码优化的目的是提高...

  • 每周阅读(6/27)

    HashMap的实现和原理,如何运用红黑树实现扩容优化。Java8系列之重新认识HashMap Google的代码...

  • Unity学习—脚本优化Tips

    本文原地址:Unity学习—脚本优化Tips 官方文档参考 代码编译原理 Unity 首先将脚本编译为中间语言 C...

  • 编译器前端和后端

    编译器粗略分为词法分析,语法分析,类型检查,中间代码生成,代码优化,目标代码生成,目标代码优化。把中间代码生成及之...

  • Build settings探究之—编译优化

    Build settings探究之—编译优化 Build settings探究之—编译优化

  • 编译原理——代码优化(数据依赖)

    •结构问题:优化的代码调度利用了现代化计算机体系结构的特征。这样的机器一般允许管道执行,其中几个指令同时处于不同的...

  • iOS的性能优化

    1、ipa包体积优化 1.1 编译配置优化:编译器代码层面优化Optimize Level;Bitcode(较难...

  • 编译原理一

    编译原理 正规式或NFA到DFA最小化 四元式DAG图的优化,根据要求写出优化结果翻译到目标代码 给你文法,给你句...

  • 编译原理——代码优化(调度和循环)

    •优先拓扑顺序:基本块的数据依赖图通常是非循环的,并且有许多拓扑顺序与图一致。多种启发式方法来用来把给定的图选择优...

网友评论

      本文标题:编译原理系列之十 代码优化

      本文链接:https://www.haomeiwen.com/subject/rcjflqtx.html