WebAssembly 处理音视频时内存泄漏怎么排查?
我用 Emscripten 把 FFmpeg 编译成 wasm,在浏览器里解码 H.264 视频流,但每次播放完内存占用都不释放,Chrome 任务管理器里显示页面内存一直在涨。试过调用 Module._free(ptr) 释放指针,也检查了 C 代码里的 malloc 都有对应 free,还是不行。
是不是 wasm 模块本身的堆没清理?或者 JS 和 wasm 之间传 buffer 有引用没断开?求有经验的大佬指点下排查方向!
const videoData = new Uint8Array(arrayBuffer);
const ptr = Module._malloc(videoData.length);
Module.HEAPU8.set(videoData, ptr);
// ... 调用解码函数
Module._free(ptr); // 这样释放应该没问题吧?
Module._malloc分配的内存都调用了Module._free,同时检查是否有全局变量或闭包持有对这些内存的引用,导致无法释放。可以使用 Chrome 的开发者工具中的 Memory 面板进行堆快照对比,找出未释放的对象。