Emscripten memory leak
Emscripten memory leak
我有一个使用Emscritpen从C
编译的javascript函数,它使用一定量的内存(大约8mb),我需要经常调用它。(每 20 秒呼叫一次)。
但是每次调用后,使用的内存量都会增加。最终它开始失败:
Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value 100663296, (2) compile with ALLOW_MEMORY_GROWTH which adjusts the size at runtime but prevents some optimizations, or (3) set Module.TOTAL_MEMORY before the program runs.
如果我增加内存量,它会工作更长时间,但最终仍然失败。我不明白为什么 EMScripten 在每次调用后都试图扩大堆大小。
一些代码示例:
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 代码分配的内存。最终,我们的堆空间不足,需要增加。堆数组是持久的,并且不会像我最初认为的那样在每次调用后清除。
我解决了这个问题。我不明白,如果你在 C/C++ 程序中分配内存,该程序将以 JS 编译。我认为在每次调用时EMScripten都会生成新的清晰环境,但事实并非如此,环境将被重用。所以我们仍然关心内存泄漏。
相关文章:
- JavaScript 将“memory”返回为 0,即使我增加或减少它的值
- Firefox High Memory (RAM) 使用,如何使用 JavaScript 释放
- OnDemandGrid带有dstore Tackable和Memory,当数据被设置到其中时,它不显示完整的数据
- Javascript removeChild memory leak?
- JavaScript Memory Leak - DOM 节点和后代上的垃圾回收
- 在 JavaScript Memory Aid 游戏中设置一分钟计时器
- jQuery不会删除Memory Game的对
- (dojo)Observable无法观察Memory Store中的更改
- Memory Javascript
- 《英雄指南》教程中出现的“angular-in-memory-web-api”问题
- 使用XML创建dojo.store.memory
- 如何阅读Firefox "about:memory"正确
- Emscripten memory leak
- Javascript Memory Savings - if Statement var Declarations
- JavaScript Memory Management (Info)
- angular2-in-memory-web-api 404 error
- 是否可以在无头铬中使用window.performance.memory ?
- Memory: Java vs C++ vs JS