这几天蛋疼,下手开始实现一个虚拟机,主要的参考书籍是Bill Blunden的<Virtual Machine Design and Implementation in C/C++>,书中实现了一个基本完整的HEC虚拟机。除了实践一下其中的知识以外,最主要的还是实际调查一下自己对原作者实现中不满意的地方,如果时间和精力足够,再添加没有实现的JIT以及配套的高级语言编译器。
在Hec的实现中,有一个基本的功能,就是实现虚拟机字节码的endian与native code的endian之间的转换(如果相反),只是简单的颠倒字节顺序。主要在虚拟机加载字节码,开始执行之前调用,直接影响字节码加载到开始执行期间用户的等待时间。
Blunden为了优化性能,在这部分应用了循环展开[1]技术。本文记录了在开发过程中采用的几种与Blunden不同的实现方法,以及初步的对比。