我写了一个Brainfuck实现(C ++),它的工作方式如下:
- 读取输入的 Brainfuck 文件
- 进行一些微小的优化
- 将 Brainfuck 转换为虚拟机的机器码
- 在虚拟机中执行生成的机器码
这样做已经非常快了,但现在瓶颈在于虚拟机。它使用 C++ 编写,读取标记,执行操作(如果您了解 Brainfuck 的话,这些操作都不多),以此类推。
我想做的是剥离虚拟机并即时生成本地机器码(基本上是 JIT 编译器)。这可以轻松实现 20 倍速度提升。
这意味着步骤 3 将被 JIT 编译器替换,并用生成的机器码来代替步骤 4 中的执行。
我真的不知道从哪里开始,所以我有几个问题:
- 这是怎么工作的?生成的机器码如何执行?
- 是否有用于生成本地机器码的 C++ 库?