在此功能(https://github.com/migerh/wasm-filter/blob/master/filter.js)中:
function filter(imageData) {
const bufferPointerIn = 1024,
{data, width, height} = imageData,
bufferIn = new Uint8Array(wasmModule.memory.buffer, bufferPointerIn, width * height * 4),
bufferPointerOut = 2048 + width * height * 4,
bufferOut = new Uint8Array(wasmModule.memory.buffer, bufferPointerOut, width * height * 4);
bufferIn.set(data);
wasmModule.outline_c(bufferPointerIn, bufferPointerOut, width, height);
data.set(bufferOut);
return data;
}
bufferPointerIn
和bufferPointerOut
根据https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array基本上是byteoffset
如何将其用作指针?我的意思是如何在C语言中将javascript中的整数理解为unsigned char*
。谢谢。
答案 0 :(得分:1)
wasmModule.memory.buffer
是代表WASM模块内存的缓冲区。也就是说,从C程序的角度来看,地址X处的值将等于wasmModule.memory.buffer
的索引X处的值。
因此,对于wasmModule.memory.buffer
是有效索引的任何内容(即介于0(包括0)和wasmModule.memory.buffer.byteLength
(不包括)之间的任何整数)将是C程序的有效内存地址。
由于您同时使用bufferPointerIn
和bufferPointerOut
作为传递给C函数的指针以及Uint8Array
的偏移量,因此这意味着这些数组中的内容将与这些地址处的内存内容(从C程序的角度来看)。