代码之家  ›  专栏  ›  技术社区  ›  user3318845

虚拟机是否必须解释字节码,或者可以直接解释VM的程序集?

  •  2
  • user3318845  · 技术社区  · 10 年前

    我计划在Go中实现VM。我看到了一些教程,其中人们为他们的虚拟机设计了自己类型的程序集,但虚拟机并没有直接执行程序集代码。他们对VM的每个指令进行编码,为每个指令分配一个数字,并为机器形成一个特殊的字节码。 是解释字节码更好,还是解释汇编代码并获得相同的结果更好?

    2 回复  |  直到 9 年前
        1
  •  3
  •   Agis    10 年前

    如果您想在不同的来宾平台中使用VM,那么 .

    字节码给你的好处是 可移植性 (因此,替换命名 “p代码” ,是 “便携式代码” ).

    如果您计划在不同的平台上使用VM,那么应该使用字节码。然后,您必须负责将程序编译成字节码指令,而VM将负责其余部分。

        2
  •  1
  •   Nick Johnson    10 年前

    语言运行时执行编译的字节码而不是文本汇编指令,因为解析文本很慢。编写良好的运行时可以在几个处理器周期内解析和执行字节码指令,但解析文本语句需要更多的工作。最明智的做法是解析整个程序集文件,并将其存储在内存中的中间表示形式中,这正是字节码的含义。此外,一些事情(如跳转和寻址)仅在字节码中才有意义。

    与其将字节码视为汇编的二进制表示,不如将汇编视为字节码的文本表示。