javascript - Emscripten内存泄漏

标签 javascript memory-management emscripten

我有一个使用 Emscritpen 从 C 编译的 javascript 函数,它使用了一些内存(大约 8mb),我需要经常调用它。 (每 20 秒调用一次)。

但每次调用后,使用的内存量都会增加。最终它开始失败:

无法扩大内存阵列。 (1) 使用 -s TOTAL_MEMORY=X 进行编译,X 高于当前值 100663296,(2) 使用 ALLOW_MEMORY_GROWTH 进行编译,它会在运行时调整大小但会阻止某些优化,或者 (3) 在程序运行之前设置 Module.TOTAL_MEMORY。

如果我增加内存量,它可以工作更长时间,但最终还是会失败。我不明白为什么 EMScripten 会在每次调用后尝试扩大 HEAP 大小。

一些代码示例:

var render = Module.cwrap('render_djvu', 'number', ['string']);

调用:

FS.createDataFile("/", "test.djvu", byteArray, true, true);
removeRunDependency();
var heapPointer = render('test.djvu');
FS.truncate('test.djvu', 0);
FS.unlink('test.djvu');

UP:问题是 C++ 代码中的内存泄漏,我们没有释放 C 代码分配的内存。最终我们用完了堆空间,需要增加空间。 HEAP 数组是持久的,并且不会像我最初认为的那样在每次调用后被清除。

最佳答案

我解决了这个问题。我不明白如果你在将在 JS 中编译的 C/C++ 程序中分配内存。我虽然在每次调用时 EMScripten 都会生成新的清晰环境,但事实并非如此,环境将被重用。所以我们还是关心内存泄漏。

关于javascript - Emscripten内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22947843/

相关文章:

javascript - Highcharts 仪表样式和添加 CSS 元素

node.js - 如何解决 Node.js 依赖关系?

javascript - WebAssembly 和 OpenGL - 单一上下文,多个输出(到 Canvas )

javascript - React Native Redux 防止操作在 2 分钟内重复两次

javascript - Firebase 数据关系和选择的最佳实践

javascript - 隐式和显式正则表达式创建会产生不同的执行结果

php - Yii NestedSetBehavior 内存使用情况

objective-c - 分配内存

c++ - 使用 TinyXml for C++ 时需要清理哪些内存管理?

c++ - Emscripten安装错误: "./emcc no such file or directory"