C 字节码如何更快?

C 字节码如何更快?,c,assembly,interpreter,vm-implementation,C,Assembly,Interpreter,Vm Implementation,我正计划为我正在创建的一种语言创建一个虚拟机,但我不明白如何将我的程序集转换为我自己的指令集来加快执行速度。如果我让虚拟机理解我的程序集,这与让虚拟机理解我的字节码不完全相同吗?显然,字节码的字符数将少于程序集的字符数,这真的会有这么大的区别吗? 例如,如果我自己编写字节码,那么我必须向我的虚拟机展示如何理解它,如果虚拟机直接读取程序集,那么我仍然必须向它展示如何理解程序集,那么一个如何比另一个更快 --编辑-- 所以如果我让我的虚拟机直接解释下面的代码,它应该和下面的代码一样快 add r1,

我正计划为我正在创建的一种语言创建一个虚拟机,但我不明白如何将我的程序集转换为我自己的指令集来加快执行速度。如果我让虚拟机理解我的程序集,这与让虚拟机理解我的字节码不完全相同吗?显然,字节码的字符数将少于程序集的字符数,这真的会有这么大的区别吗? 例如,如果我自己编写字节码,那么我必须向我的虚拟机展示如何理解它,如果虚拟机直接读取程序集,那么我仍然必须向它展示如何理解程序集,那么一个如何比另一个更快

--编辑--

所以如果我让我的虚拟机直接解释下面的代码,它应该和下面的代码一样快

add r1, r2, r3 ; Add the values of reg2 and reg3, store the result in reg1
print r1
编码字节码:

c5 7c 8c d8 c8 d7

上面的字节码和汇编代码只是我认为它会是什么样子的示例。

解析是出了名的困难和缓慢

如果按照指定的方式使用汇编程序指令,则必须解析指令、解析参数和删除注释。大量解析代码、字符串比较、将参数转换为寄存器偏移量或值等

执行字节码是一个简单的开关语句,一个简单的整数比较。寄存器参数可以预定义为寄存器数组中的偏移量。快得多


您仍然可以将其视为汇编程序——只需将汇编程序编译成字节码即可。汇编程序显示工具的字节码也很有用。

解析是出了名的困难和缓慢

如果按照指定的方式使用汇编程序指令,则必须解析指令、解析参数和删除注释。大量解析代码、字符串比较、将参数转换为寄存器偏移量或值等

执行字节码是一个简单的开关语句,一个简单的整数比较。寄存器参数可以预定义为寄存器数组中的偏移量。快得多


您仍然可以将其视为汇编程序——只需将汇编程序编译成字节码即可。字节码到汇编程序显示工具也很有用。

是什么让你认为vm上的字节码更快?我被告知直接执行字节码比执行自定义汇编代码加载更快。不要相信internet上的人。@stark请查看我编辑的问题。告诉你这一点的人不知道他/她在说什么,他们的解释过于简单,或者你误解了他们。当然,您可以找到一段字节码,由于JIT比程序集的作者更聪明,因此它的执行速度比某些优化较差的程序集快,但这并不意味着“字节码比程序集快”是什么让你认为虚拟机上的字节码更快?有人告诉我,直接执行字节码比执行自定义汇编代码更快。不要相信互联网上的人。@斯塔克,请看我编辑过的问题。告诉你的人可能根本不知道他/她在说什么,他们的解释过于简单,或者你误解了他们。当然,您可以找到一段字节码,由于JIT比程序集的作者更聪明,因此它的执行速度比某些优化较差的程序集快,但这并不意味着“字节码比程序集快”操作:不要把解释汇编源代码与运行二进制机器代码混淆。操作:不要把解释汇编源代码与运行二进制机器代码混淆。