WebAssembly程序可以泄漏内存吗?

时间:2017-05-31 13:57:47

标签: web memory-leaks webassembly

WebAssembly程序以固定数量的虚拟内存开始,可以request additional memory at runtime。他们也被鼓励discard unused physical pages。可以长时间运行,表现不佳的WebAssembly程序leak memory?这最终会导致WebAssembly程序崩溃吗?

2 个答案:

答案 0 :(得分:6)

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

在那个记忆之外,一个程序也可以"泄漏"通过保留一堆JavaScript对象并阻止GC收集它们。这最终会达到内存限制,导致崩溃。

答案 1 :(得分:0)

是的,我们正在调查这样一个案例!

https://github.com/emscripten-core/emscripten/issues/14459
(欢迎任何 emscripten / em++ 专家帮助??‍♂️)


泄漏开始: before


它耗尽了可用的 wasmMemoryafter


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