wasm的内存模型

246 阅读1分钟

风起提示:由于技术的发展风起云涌,需留意文章时效,2023-06-24。

栈式虚拟机

wasm只提供一个沙盒化的线性内存,数据段、函数栈都位于其中,可看成是一种栈式虚拟机,没有寄存器的概念,所有操作数都放在运行时的栈上,内存分为托管堆栈和非托管堆栈。

我们将线性内存中由编译器组织的堆栈称为“非托管堆栈(unmanaged memory)”,非托管堆栈可以暴露给外部供js读写访问

其余的是“托管堆栈(managed memory)”,托管堆栈不受用户控制。

js与wasm传参

传参的一种方式是值拷贝,这种方式效率低不适合大数据量传递。

由于js可直接访问wasm的线性内存,所以另一种传参是wasm与js共享一段线性内存,传递这段内存的引用即可,这种方式适合大数量传递。

总之,js与wasm传参设计原则:

  • 最小化复制
  • 最小化序列化

更多精彩内容可关注风起的博客,微信公众号:听风说图