浏览器如何让 WebAssembly Stack Machine 更高效
How browser makes WebAssembly Stack Machine more efficient
在 WebAssembly 上的这篇文章中说:
...we have to talk about one more thing: stack machines. Although the browser compiles it to something more efficient...
想知道浏览器如何使堆栈机器更高效,它使用了什么样的技术。
编译成寄存器的使用
考虑 Wasm 的操作数堆栈的一种方式是,它只是一组(无限的)虚拟寄存器。但是,不是 显式 引用这些寄存器,而是每条指令 隐式 引用堆栈中的某些插槽。但是多亏了类型检查和验证,编译器在程序的任何时候总是静态地知道堆栈上值的数量和类型。
因此生成的代码永远不需要具体化堆栈,而是可以直接将每个堆栈槽,即每个虚拟寄存器分配给一个真实的硬件寄存器(或者在寄存器分配时以通常的方式将它们溢出到硬件堆栈寄存器用完了)。
Wasm 是堆栈机器而不是寄存器机器的唯一原因是代码紧凑。这是描述寄存器使用的一种特别紧凑的方式。
在 WebAssembly 上的这篇文章中说:
...we have to talk about one more thing: stack machines. Although the browser compiles it to something more efficient...
想知道浏览器如何使堆栈机器更高效,它使用了什么样的技术。
编译成寄存器的使用
考虑 Wasm 的操作数堆栈的一种方式是,它只是一组(无限的)虚拟寄存器。但是,不是 显式 引用这些寄存器,而是每条指令 隐式 引用堆栈中的某些插槽。但是多亏了类型检查和验证,编译器在程序的任何时候总是静态地知道堆栈上值的数量和类型。
因此生成的代码永远不需要具体化堆栈,而是可以直接将每个堆栈槽,即每个虚拟寄存器分配给一个真实的硬件寄存器(或者在寄存器分配时以通常的方式将它们溢出到硬件堆栈寄存器用完了)。
Wasm 是堆栈机器而不是寄存器机器的唯一原因是代码紧凑。这是描述寄存器使用的一种特别紧凑的方式。