WebAssembly程序以固定数量的虚拟内存开始,可以request additional memory at runtime。他们也被鼓励discard unused physical pages。可以长时间运行,表现不佳的WebAssembly程序leak memory?这最终会导致WebAssembly程序崩溃吗?
答案 0 :(得分:6)
WebAssembly程序可以耗尽其分配的所有内存,一旦通过达到内存的声明最大值或4GiB或浏览器的限制而耗尽,那么它很可能崩溃。在内存中,使用像emscripten这样的工具链的C ++程序有一个分配器,分配器将决定它在内存不足时的作用。可能会崩溃!
在那个记忆之外,一个程序也可以"泄漏"通过保留一堆JavaScript对象并阻止GC收集它们。这最终会达到内存限制,导致崩溃。
答案 1 :(得分:0)
是的,我们正在调查这样一个案例!
https://github.com/emscripten-core/emscripten/issues/14459
(欢迎任何 emscripten
/ em++
专家帮助??♂️)
此后,对 WASM 模块的所有测试调用都失败了,但这不会使桌面 Chrome 中的选项卡崩溃,其他浏览器的行为可能会有所不同。 (泄漏发生在所有经过测试的浏览器中。)