node.js Buffer 和 WebAssembly Memory 有什么区别?
What's the difference between node.js Buffer and WebAssembly Memory?
我想知道是否可以替代 Node.js
Buffer memory allocation with WebAssembly Memory?
如果有,有什么优势吗?
在 node.js 中,Buffer
和 WebAssembly Memory
对象都有一个 buffer
属性 类型 ArrayBuffer
which itself is defined as part of Typed Arrays in 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 对象只是字节流的容器。为了访问和使用它,你必须将它 wrap/convert 到类型化数组(例如 Uint8Array、DataView 等)、node.js 缓冲区或 WebAssembly 内存。
一个重要的区别是 WebAssembly.Memory
可以通过 Memory.prototype.grow
调整大小,而 Buffer
不能。
另一个是WebAssembly.Memory
的设计是为了使用硬件内存保护来去除动态边界检查,因此它的长度被限制在64kb的倍数。 Buffer
可以有任意字节长度。
我想知道是否可以替代 Node.js Buffer memory allocation with WebAssembly Memory?
如果有,有什么优势吗?
在 node.js 中,Buffer
和 WebAssembly Memory
对象都有一个 buffer
属性 类型 ArrayBuffer
which itself is defined as part of Typed Arrays in 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 对象只是字节流的容器。为了访问和使用它,你必须将它 wrap/convert 到类型化数组(例如 Uint8Array、DataView 等)、node.js 缓冲区或 WebAssembly 内存。
一个重要的区别是 WebAssembly.Memory
可以通过 Memory.prototype.grow
调整大小,而 Buffer
不能。
另一个是WebAssembly.Memory
的设计是为了使用硬件内存保护来去除动态边界检查,因此它的长度被限制在64kb的倍数。 Buffer
可以有任意字节长度。