制作我自己的模块与使用 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++ 模块之间的大小差异,差异是 177KB
到 1.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 以了解编译器标志。
我自己制作 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++ 模块之间的大小差异,差异是 177KB
到 1.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 以了解编译器标志。