Создание собственного модуля против использования модуля, сгенерированного em ++ - PullRequest
1 голос
/ 25 июня 2019

Создание моей собственной module.js (выборки и создание моего собственного Webassembly.Module) глупая идея? По сравнению с использованием сгенерированного em ++?

Компиляция программы с использованием embind в emscripten дает как мой module.wasm файл, так и module.js. Однако размер файла module.js составляет 1,5 МБ, и я не могу контролировать управление памятью и тому подобное.

В настоящее время я использую пользовательскую скомпилированную программу на c ++, которая использует OpenCV, и у меня все время заканчивается память, я не могу правильно распределить память, если не создаю свой собственный Webassembly.Module.

Мое решение:

Я прочитал settings.js (который находится в той же папке, что и ваш em++ исполняемый файл).

Там я узнал, что единственный флаг, который мне нужно было установить, это -s ALLOW_MEMORY_GROWTH=1 во время компиляции.

Это позволило мне определить предел TOTAL_MEMORY модуля при создании в javascript.

Ответы [ 2 ]

0 голосов
/ 25 июня 2019

Может быть, вы хотите использовать опции компилятора emcc / em ++.

Как вы упомянули в комментарии, вам нужно -s ALLOW_MEMORY_GROWTH=1, но оно не делает то, что вы думаете, и вы не должны устанавливать TOTAL_MEMORY во время выполнения тоже.

Вы должны установить TOTAL_MEMORY в качестве флага компилятора.Например, -s TOTAL_MEMORY=100MB.Рекомендуется также хранить -s ALLOW_MEMORY_GROWTH=1.

Документация вам совсем не поможет, я настоятельно рекомендую прочитать setting.js из исходного кода напрямую, чтобы узнать о компиляторефлаги.

0 голосов
/ 25 июня 2019

Я только что проверил разницу в размерах между модулем c ++, который использует opencv, и тем, который не использует, разница была от 177KB до 1.5MB.

Это может указывать на то, что да, глупо пытаться написать вашсобственный объект Module.

Но я не уверен на 100%.

...