浏览器如何使WebAssembly Stack Machine更高效

时间:2018-04-22 16:04:11

标签: google-chrome firefox v8 webassembly

WebAssembly的这篇文章中,它说:

  

......我们还要谈谈另外一件事:堆叠机器。虽然浏览器会将其编译为更高效的内容 ...

想知道浏览器如何提高堆栈机器的效率,它使用什么样的技术。

1 个答案:

答案 0 :(得分:10)

它将其编译成寄存器的使用。

考虑Wasm操作数堆栈的一种方法是它只是一组(无限)虚拟寄存器。但是,不是明确地引用这些寄存器 ,而是每条指令隐含地引用堆栈中的某些槽。但是由于类型检查和验证,编译器总是静态地知道程序中任何一点堆栈上的值的数量和类型。

因此,生成的代码永远不需要实现堆栈,但可以直接将每个堆栈槽(即每个虚拟寄存器)分配给真实的硬件寄存器(或者在寄存器分配耗尽时以通常的方式将它们溢出到硬件堆栈寄存器)。

Wasm是堆栈机器而不是注册机器的唯一原因是代码紧凑性。这是描述寄存器使用的一种特别紧凑的方式。