编译器常用优化方法

作者: Android高级架构探索 | 来源:发表于2018-10-21 20:43 被阅读10次

常量传播
在编译优化时, 能够将计算出结果的变量直接替换为常量。


image.png

编译器在进行编译的时候,将a直接由1替换。因此优化后的代码为:


image.png
常量折叠
在编译优化时,多个变量进行计算时,而且能够直接计算出结果,那么变量将有常量直接替换。
image.png

编译器在进行编译时,将a直接由1替换,因此优化后的代码:


image.png
复写传播
两个相同的变量可以用一个代替。
image.png
编译器在进行编译的时候,发现y和x相等,因此用x来代替y,优化后的代码如下:
image.png
公共子表式消除
如果一个表达式E已经计算过了,并且从先前的计算到现在的E中的变量都没有发生变化,那么E的此次出现就成为了公共子表达式。
image.png
经过优化之后的代码可能如下:
image.png

无用代码消除
永远不能被执行到的代码或者没有任何意义的代码会被清除掉。


image.png
因此优化过后的代码如下:
image.png

数组范围检查消除
数组边界检查不是必须在运行期间一次不漏的检查,而是可以协商的。如果及时编译器能根据数据流分析出变量的取值范围在[0,max_length]之间,那么在循环期间就可以把数组的上下边界检查消除。

方法内联
编译器最终要的优化手段,可减少方法调用的成本,并未其他优化做基础。

逃逸分析
分析对象动态作用域,一旦确定对象不会发生方法逃逸和线程逃逸,就可以对这个变量进行高效的优化,比如栈上分配、同步消除、标量替换等。

相关文章

  • 编译器常用优化方法

    常量传播在编译优化时, 能够将计算出结果的变量直接替换为常量。 编译器在进行编译的时候,将a直接由1替换。因此优化...

  • 编译优化算法

    参考资料: 1 编译器常用优化方法 常量传播 将能够计算出结果的变量直接替换为常量 优化后 常量折叠 多个变量计算...

  • Clang Attributes 黑魔法小记

    编译器属性__attribute__用于向编译器描述特殊的标识、检查或优化,几个常用的用法看《mattt大神的文章...

  • LLVM

    一、编译器 性能优化:启动优化、界面优化、架构优化 编译型语言:OC(编译器是clang)、C(编译器可以直接执行...

  • iOS优化收集

    iOS开发-18个性能优化/内存优化常用方法(很常用) https://blog.csdn.net/Zhai199...

  • C++

    关闭优化 有时候输出和自己想的不一样,有可能编译器进行了优化,g++关闭优化选项的方法如下

  • 编译器笔记46-代码优化-常用的代码优化方法

    优化的分类 机器无关优化: 针对中间代码 机器相关优化: 针对目标代码 局部代码优化: 单个基本块范围内的优化 全...

  • Linux 下如何绕过编译器优化

    本文首次发表在 Linux 下如何绕过编译器优化 有同学在群里聊到编译器优化的事情,很多时候期望编译器默认做优化,...

  • 2021-01-15

    hive中groupby优化_HiveSQL常用优化方法全面总结[https://blog.csdn.net/we...

  • 第二十八篇: Swift属性

    函数内联 函数内联是一种编译器技术优化,它通过使用方法的内容替换直接调用该方法,从而优化性能。1)将确保有时内联函...

网友评论

    本文标题:编译器常用优化方法

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