3

WebAssembly 程序以固定数量的虚拟内存开始,并且可以在运行时请求额外的内存。还鼓励他们丢弃未使用的物理页面。长时间运行、表现不佳的 WebAssembly 程序会泄漏内存吗?这最终会导致 WebAssembly 程序崩溃吗?

4

2 回答 2

8

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

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

于 2017-05-31T14:15:32.490 回答
0

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

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


泄漏开始: 前


它耗尽可用wasmMemory后


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

于 2021-06-16T07:43:26.907 回答