"compact" 字节码的好处 - stack-machine VM
Benefits of "compact" bytecode - stack-machine VM
首先声明一下,我目前正在编写一个字节码解释器。
我到处都在阅读关于字节码必须是 "compact" 的内容。但是,我真的不明白这是什么意思,或者有什么好处。
目前,例如,我的 "bytecode" 是一个元组数组,第一个元素是一个字节 - 操作码本身(8 位),第二个元素是 uint64(我们称之为 unsigned long long
) - 操作的可选参数(64 位)。
Tha 使每个 "instruction" 72 位。 (不可否认,这是非常不必要的,因为他们中的许多人不接受任何争论,但我认为它更容易 - 并且性能更高? - 这样因为我不必每次都检查是否有参数,并且只需通过指令列表)。
所以,我的问题:
- 更紧凑的代码有什么好处? (例如,如果每条指令是 32 位而不是 72 位,我会实现什么?)
- 我可以做些什么来让它变得更好? (我如何以有效的方式处理 "optional" 参数?即:可变大小的指令)
我能想到的好处:
- 更少的内存使用
- 更少的缓存未命中
- 小于实际大小(如果你想 store/deploy 字节码)
首先声明一下,我目前正在编写一个字节码解释器。
我到处都在阅读关于字节码必须是 "compact" 的内容。但是,我真的不明白这是什么意思,或者有什么好处。
目前,例如,我的 "bytecode" 是一个元组数组,第一个元素是一个字节 - 操作码本身(8 位),第二个元素是 uint64(我们称之为 unsigned long long
) - 操作的可选参数(64 位)。
Tha 使每个 "instruction" 72 位。 (不可否认,这是非常不必要的,因为他们中的许多人不接受任何争论,但我认为它更容易 - 并且性能更高? - 这样因为我不必每次都检查是否有参数,并且只需通过指令列表)。
所以,我的问题:
- 更紧凑的代码有什么好处? (例如,如果每条指令是 32 位而不是 72 位,我会实现什么?)
- 我可以做些什么来让它变得更好? (我如何以有效的方式处理 "optional" 参数?即:可变大小的指令)
我能想到的好处:
- 更少的内存使用
- 更少的缓存未命中
- 小于实际大小(如果你想 store/deploy 字节码)