WebAssembly 程序会泄漏内存吗?

Can a WebAssembly program leak memory?

WebAssembly 程序以固定数量的虚拟内存开始,可以 request additional memory at runtime. They are also encouraged to discard unused physical pages. Can long running, badly behaved WebAssembly programs leak memory 吗?这最终会导致 WebAssembly 程序崩溃吗?

WebAssembly 程序可以用完所有分配的内存,一旦达到内存声明的最大值或 4GiB,或浏览器的限制,它就可能会崩溃。在内存中,使用像 emscripten 这样的工具链的 C++ 程序有一个分配器,该分配器将决定它在内存不足时做什么。可能会崩溃!

在该内存之外,程序还可以 "leak" 持有一堆 JavaScript 对象并阻止 GC 收集它们。这最终会达到内存限制,导致崩溃。

是的,我们正在调查这种情况!

https://github.com/emscripten-core/emscripten/issues/14459
(欢迎各位emscripten / em++高手帮忙‍♂️)


泄漏开始:


用完了wasmMemory


在这一点之后,所有测试的 WASM 模块调用都会失败,但不会导致桌面选项卡崩溃 Chrome,其他浏览器的行为可能会有所不同。 (泄漏发生在所有经过测试的浏览器中。)