一个WebAssembly程序会泄露内存吗?

3
2个回答

8
一个WebAssembly程序可以使用其分配的所有内存,一旦达到内存的声明最大值,或者4GiB,或者浏览器限制,则可能会崩溃。在该内存中,使用像emscripten这样的工具链的C++程序具有一个分配器,该分配器将决定内存不足时的操作。很可能会崩溃!
在该内存之外,程序还可以通过持有一堆JavaScript对象并阻止GC收集它们而“泄漏”。这最终会达到内存限制,导致崩溃。

请定义“崩溃”是什么意思?它是否意味着内部内存结构被覆盖,可能导致CPU执行损坏的数据,或者CPU指令流可以重定向以执行用户定义的二进制文件? - Peter Teoh

1

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

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


漏洞开始: before


它会耗尽可用的wasmMemoryafter


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


1
我建议查看 https://web.dev/webassembly-memory-debugging/,其中详细描述了如何调试这些问题。 - RReverser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接