Javascript Emscripten内存泄漏

Javascript Emscripten内存泄漏,javascript,memory-management,emscripten,Javascript,Memory Management,Emscripten,我有一个用emScriptpen从C编译的javascript函数,它使用了一些内存(大约8mb),我需要经常调用它。(每20秒呼叫一次) 但是每次调用之后,使用的内存量都会增加。最终,它开始以以下方式失败: 无法放大内存阵列。(1)使用-s TOTAL_MEMORY=X编译,X高于当前值100663296;(2)使用ALLOW_MEMORY_GROWTH编译,该函数在运行时调整大小,但防止某些优化,或者(3)在程序运行之前设置Module.TOTAL_内存。 如果我增加内存量,它的工作时间会更

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

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

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

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

一些代码示例:

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


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

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

JavaScript是一种垃圾收集语言——也就是说,在需要之前内存是不可用的——你确定你衡量的是正确的吗?你想让我们找出Emscripten代码使用内存的原因,但你不向我们展示生成的代码,甚至不告诉我们它是哪个函数?我认为我们必须看到导致问题的实际代码,或者我们必须有一个可分析的可运行版本。这是一个非常大的库,但我认为我理解为什么会发生这种情况,所以我将标记为很快删除此问题。抱歉,但我不理解我的问题,所以我重新打开了问题并对其进行了一些编辑。附加代码。介意分享一下你的解决方案吗?我在另一个图书馆遇到了同样的问题。
FS.createDataFile("/", "test.djvu", byteArray, true, true);
removeRunDependency();
var heapPointer = render('test.djvu');
FS.truncate('test.djvu', 0);
FS.unlink('test.djvu');