gpt4 book ai didi

c++ - Uint8Array byteoffset 和 unsigned char*

转载 作者:行者123 更新时间:2023-11-28 04:23:50 24 4
gpt4 key购买 nike

在这个函数中(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*。提前致谢。

最佳答案

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

所以任何对 wasmModule.memory.buffer 有效的索引(即 0(含)和 wasmModule.memory.buffer.byteLength(不含)之间的任何整数) ) 将是 C 程序的有效内存地址。

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

关于c++ - Uint8Array byteoffset 和 unsigned char*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54891450/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com