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

时间:2019-06-25 12:18:57

标签: javascript module emscripten webassembly

使自己的module.js(获取解析并创建自己的Webassembly.Module)是一个愚蠢的主意吗?与仅使用em ++生成的相比?

使用embind in emscripten编译程序会同时产生我的module.wasm文件和module.js。但是module.js文件为1.5MB,我似乎对内存管理等没有控制权。

我目前正在使用一个使用OpenCV的自定义编译的c ++程序,而且我的内存不足,如果不创建自己的Webassembly.Module,就无法正确分配内存。

我的解决方案:

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

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

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

2 个答案:

答案 0 :(得分:0)

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

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

但是我不确定100%。

答案 1 :(得分:0)

也许您想使用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来了解编译器标志。