3 ms·
This Rust code [1] heap allocates some things (e.g., a string with `String::from`), and results in this [2] WASM file, which is 65kB, or 25kB after `gzip -9`.
by killercup 9y ago
This Rust code [1] heap allocates some things (e.g., a string with `String::from`), and results in this [2] WASM file, which is 65kB, or 25kB after `gzip -9`.
[1]: https://github.com/killercup/wasm-experiments/blob/bf3b30eed6ca73bfc7809f1d87b6604901d3a0b1/examples/hello.rs https://github.com/killercup/wasm-experiments/blob/bf3b30eed...
[2]: https://github.com/killercup/wasm-experiments/blob/bf3b30eed6ca73bfc7809f1d87b6604901d3a0b1/hello-wasm.gc.wasm https://github.com/killercup/wasm-experiments/blob/bf3b30eed...
- azakai 9y agoIt should be possible to reduce that a bunch more, 65kB sounds high. Running the binaryen optimizer on that wasm shrinks it by 6%. Probably more can be done on the Rust side.
- killercup 9y agoAbsolutely, yeah. Having a real linker will help with that as well. Until then, you can also compile with [profile.release] opt-level = "s" (i.e., optimizing for size), to get it down to 23kB gzipped.
- josephg 9y agoThats much smaller than I expected, especially given how large rust native binaries usually are. What allocator does that use? Does that 65k include its own malloc implementation like we needed for asmjs, or does WASM expose a system malloc library or something?
- steveklabnik 9y agowasm exposes "memory sections", which the module states up-front how much it wants. It can also generally call a "grow memory" function that makes this space bigger. That's it, from the direct wasm perspective. That said, this target uses https://github.com/alexcrichton/dlmalloc-rs https://github.com/alexcrichton/dlmalloc-rs