如何清除 WebAssembly 中使用的所有内存

Ach*_*med 6 javascript webassembly

如何简单地清除 WebAssembly 实例使用的所有内存?但仍然允许再次运行 WASM 二进制文件。

本质上,我有一个使用大量内存的 WASM 操作,如果内存耗尽(分配了太多内存,系统无法再提供),我只想重置程序;通过清除所有使用的内存,但也允许程序再次运行...有没有办法通过 WebAssembly JavaScript API 来做到这一点,因为我的在线搜索没有产生任何结果。人们是否会删除共享数组缓冲区,然后将其重新分配给同一个变量 - 我不知道?

任何帮助将非常感激。

Dr.*_*ABT 1

清理 Wasm 堆的唯一方法是允许 wasmInstance 的所有实例成为孤立的并允许 JavaScript 对 wasmInstance 进行垃圾收集(请参阅https://github.com/WebAssembly/design/issues/1396

一旦 wasmInstance 被 GC,与该实例关联的 wasm 堆也将被删除。不幸的是,这意味着要检查您的应用程序并确保 wasmInstance 没有关闭或意外内存泄漏。

当前没有方法可以缩小 wasm 堆,但是有一个针对memory.discard 的实验性提案,它适用于 Firefox 的某些夜间版本,以在释放后缩小或回收内存