ilocker:关注 Android 安全(新手) QQ: 2597294287html
传统的静态编译器 (如大多数的 C 语言编译器) 一般将编译工做分为三个阶段,分别由三个组件来完成:前端、优化器和后端。前端
前端负责解析源代码、检查错误,最后创建一个特定语言的抽象语法树 (AST) 来表示输入的代码。一般 AST 要转换为一种中间代码,优化器针对中间代码进行一系列优化,后端再根据中间代码生成最后的目标指令。后端
关于 AST,能够参考:Kaleidoscope: Implementing a Parser and AST安全
优化器负责作各类各样的变换来努力改善代码的运行时间,好比消除冗余计算。后端 (也叫代码生成器) 负责生成最终的目标指令。对于后端来讲,除了要保证生成正确的代码以外,还要负责根据不一样目标平台的特色生成性能尽量好的代码。后端一般由指令选择 (instruction selection)、寄存器分配 (register allocation) 和指令调度 (instruction scheduling) 等几个部分组成。性能
上述编译器模式一样适用于解释器和 JIT 编译器。JAVA 虚拟机 (JVM) 也是这种模式的实现,它是利用 Java 字节码做为前端和优化器之间的接口。优化