使用 wasm 数组所需的最少代码量是多少

What is the smallest amount of code needed to use a wasm array

我有一个 c++ 文件,其中包含一个函数,该函数只执行数学运算。

这个函数接受一个数组作为参数,并将它的所有结果保存回同一个数组。

我可以用 emscripten 编译它,这会给我一个工作的 js 和 wasm 文件,但它生成的 javascript 充满了我不需要的大量填充物。

如果我不想传递数组,我会执行以下操作:

var bytes = .... // The bytes of the wasm file
var Module = new WebAssembly.Module(bytes);
var wasmInstance = new WebAssembly.Instance(Module);
var desiredFunction = instance.exports.desiredFunction;

然而,当我使用上面的前 3 行代码初始化 wasm 然后我尝试调用这个命令时:

var buffer = Module._malloc(array.length);  //setup space in wasm memory

我收到一条错误消息说 "Module._malloc" 不是一个函数。我还需要编写什么代码才能让 malloc ccwrap 和 ccall 工作?

问题是 Emscripten 不是为编译非常小的程序而设计的。它是为编译大型代码库而设计的——因此它会自动将各种东西捆绑到生成的 wasm 和托管 JS 文件中。

有一个 issue that discusses adding this as a feature - 即创建最小 JS 主机的能力。

还有其他更轻量级的 C/C++ 编译工具 - 例如 webassembly - 可能更适合您的需要。