LLVM JIT介绍与分析
JIT技术Just-In-Time Compiler,是一种动态编译中间代码的方式,根据需要,在程序中编
译并执行生成的机器码,能够大幅提升动态语言的执行速度。LLVM设计上考虑了解释执行
的功能,这使它的IR可以跨平台去使用,代码可以方便地跨平台运行,同时又具有编译型语言
的优势,非常的方便。像Java语言,.NET平台等,广泛使用JIT技术,使得程序达到了非常
高的执行效率,逐渐接近原生机器语言代码的性能。
LLVM JIT实现原理
JIT引擎的工作原理并没有那么复杂,本质上是将原来编译器要生成机器码的部分要直接写
入到当前的内存中,然后通过函数指针的转换,找到对应的机器码并进行执行。实际编写
过程中往往需要处理例如内存的管理,符号的重定向,处理外部符号等问题。实现一个LLVM
的字节码(bc)的解释器其实并不复杂最好的实例就是LLVM自身的解释器lli,其总共不超过
800行代码实现了一个LLVM的字节码解释器,其源代码的github地址为:
https://github.com/llvm-mirror/llvm/blob/master/tools/lli/lli.cpp
LLVM JIT运行各种类型的代码,我们就需要将代码最终转化为LLVM
能识别的中间代码IR上