I have a web application written in Rust and wasm-bindgen that needs to store state. The state is stored like this:
lazy_static! {
static ref ID_TO_DATA: Mut
WebAssembly does not offer any instructions to deallocate memory, there is only the ability to increase the allocated size. Practically speaking, this means that the peak memory usage of your WebAssembly application is also the permanent memory usage.
For a given problem, it may be possible to tweak your algorithm to reduce the peak amount of memory.
I don't have the knowledge or ability to test this, but one out-of-the-box idea would be to try and have multiple WebAssembly runtimes distinct from each other. You could chew up a lot of memory in one to compute a relatively small result, serialize that result outside of the WASM runtime, then throw it away and spin up a new one. This is likely only to be useful in certain specific problem domains.
In the future, memory resizing may be re-added to WebAssembly. It was explicitly removed before the MVP release:
After the MVP, we are moving to things that diverge and cannot be polyfilled, and memory resizing makes more sense to add at that point in time.
Thanks to alexcrichton and steveklabnik for answering this question in the Rust Discord.