node.js Buffer和WebAssembly Memory有什么区别?

我想知道是否有可能用WebAssembly 内存replaceNode.js 缓冲区内存分配?

如果是的话,有什么好处吗?

在node.js中, Buffer和WebAssembly Memory对象都有一个ArrayBuffertypes的buffer属性,它本身被定义为ECMAScript / JavaScript 2015中的Typed Arrays的一部分。

 node --version v8.1.2 node > mem = new WebAssembly.Memory({initial: 10}); Memory {} > buf = new Buffer("abc") <Buffer 61 62 63> > mem.buffer ArrayBuffer { byteLength: 655360 } > buf.buffer ArrayBuffer { byteLength: 8192 } 

普通的ArrayBuffer对象只是一个字节stream的容器。 为了访问和使用它,你必须把它转换成一个Typed Array(例如Uint8Array,DataView等等),一个node.js缓冲区或WebAssembly Memory。

一个显着的区别是WebAssembly.Memory可以通过Memory.prototype.grow进行调整,而Buffer不是。

另一个是WebAssembly.Memory的devise,使硬件内存保护可以用来消除dynamic范围检查,因此其长度被钳位到64kb的倍数。 Buffer可以有任意的字节长度。