Документация предлагает два варианта: позволить оптимизатору удалить ненужный код, а затем заменить клей .js своим или использовать флаг SIDE_MODULE
.
Обе опции приводят к импорту memory
(вместо экспорта), а в случае SIDE_MODULE
также определяется тонна дополнительного импорта / экспорта.
Сравните это с чистым выводом, предоставленным Webassembly Studio :
(module
(type $t0 (func))
(type $t1 (func (result i32)))
(func $__wasm_call_ctors (type $t0))
(func $main (export "main") (type $t1) (result i32)
i32.const 42)
(table $T0 1 1 anyfunc)
(memory $memory (export "memory") 2)
(global $g0 (mut i32) (i32.const 66560))
(global $__heap_base (export "__heap_base") i32 (i32.const 66560))
(global $__data_end (export "__data_end") i32 (i32.const 1024)))
Здесь память экспортируется, и предоставляется __heap_base
, что облегчает написание нашего собственного распределителя. Вывод Emscripten не экспортирует такие значения, поэтому мы не можем знать, с чего начать выделение памяти.
Можно ли получить аналогичный вывод с emcc
?
Обновление: кажется, что статические / стековые размеры определяются внутренне emcc, и единственный способ получить их - проанализировать сгенерированный файл .js. Боковые модули - это другой зверь, и мне, вероятно, следует избегать их, если мне на самом деле не нужны перемещаемые модули.