【问题标题】:Uint8Array byteoffset and unsigned char*Uint8Array byteoffset 和 unsigned char*
【发布时间】:2019-07-20 08:20:03
【问题描述】:

在这个函数中(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;
}

bufferPointerInbufferPointerOut根据https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array基本上是byteoffset

它如何用作指针?我的意思是如何将javascript中的整数理解为C中的unsigned char*。提前谢谢你。

【问题讨论】:

    标签: c++ webassembly


    【解决方案1】:

    wasmModule.memory.buffer 是代表 WASM 模块内存的缓冲区。也就是说,从 C 程序的角度来看,地址 X 处的值将是 wasmModule.memory.buffer 的索引 X 处的任何值。

    因此,任何对 wasmModule.memory.buffer 有效的索引(即 0(包括)和 wasmModule.memory.buffer.byteLength(不包括)之间的任何整数)都是 C 程序的有效内存地址。

    由于您使用bufferPointerInbufferPointerOut 作为传递给C 函数的指针以及Uint8Arrays 的偏移量,这意味着这些数组中的内容将对应于内存的内容这些地址(从 C 程序的角度来看)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多