我想知道是否可以 用 WebAssembly Memory替换 Node.js缓冲区内存分配?
如果是,有什么优势吗?
在 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 内存。
一个显着的区别是WebAssembly.Memory
通过Memory.prototype.grow
while Buffer
is not 可以调整大小。
另一个WebAssembly.Memory
设计是为了可以使用硬件内存保护来删除动态边界检查,因此它的长度被限制为 64kb 的倍数。 Buffer
可以有任意字节长度。