1

我想知道是否可以 用 WebAssembly Memory替换 Node.js缓冲区内存分配?

如果是,有什么优势吗?

4

2 回答 2

4

在 node.jsBuffer和 WebAssemblyMemory对象中都有一个buffer类型的属性,ArrayBuffer它本身被定义为ECMAScript/JavaScript 2015 中类型化数组的一部分。

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 对象只是一个字节流的容器。为了访问和使用它,您必须将其包装/转换为类型化数组(例如 Uint8Array、DataView 等)、node.js 缓冲区或 WebAssembly 内存。

于 2017-06-22T16:56:32.473 回答
3

一个显着的区别是WebAssembly.Memory通过Memory.prototype.growwhile Bufferis not 可以调整大小。

另一个WebAssembly.Memory设计是为了可以使用硬件内存保护来删除动态边界检查,因此它的长度被限制为 64kb 的倍数。 Buffer可以有任意字节长度。

于 2017-06-24T00:55:14.017 回答