制作我自己的模块与使用 em++ 生成的模块

Making my own Module vs Using em++ generated module

我自己制作 module.js(获取解析并创建我自己的 Webassembly.Module)是不是一个愚蠢的想法?与仅使用 em++ 生成的相比?

在 emscripten 中使用 embind 编译程序会同时生成我的 module.wasm 文件和 module.js。但是 module.js 文件是 1.5MB,我似乎无法控制内存管理等。

我目前使用的是一个使用 OpenCV 的自定义编译的 c++ 程序,我将 运行 排除在内存之外,如果我不创建自己的 Webassembly.Module,我将无法正确分配内存。

我的解决方案:

我通读了 settings.js(与您的 em++ 可执行文件位于同一文件夹中)。

我了解到编译时我唯一需要设置的标志是-s ALLOW_MEMORY_GROWTH=1

这让我能够在 javascript 中创建时决定模块的 TOTAL_MEMORY 限制。

我刚刚测试了使用 opencv 和不使用 opencv 的 c++ 模块之间的大小差异,差异是 177KB1.5MB

这可能表明是的,尝试编写自己的 Module 对象是愚蠢的。

但我不是 100% 确定。

也许您想使用 emcc/em++ 编译器选项。

正如您在评论中提到的,您需要 -s ALLOW_MEMORY_GROWTH=1,但它并不像您想象的那样,您也不应该在运行时设置 TOTAL_MEMORY

您应该将 TOTAL_MEMORY 设置为编译器标志。例如,-s TOTAL_MEMORY=100MB。最好也保留 -s ALLOW_MEMORY_GROWTH=1

文档对您没有任何帮助,我强烈建议您直接阅读 setting.js from the source code 以了解编译器标志。