Suk*_*lay 5 javascript memory-management emscripten
我有一个C用Emscritpen 编译的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每次尝试都需要HEAP放大,如果我每次尝试都做同样的事情.我不能在这里发布所有代码,因为它是来自大型库的功能.
PS:
在电话前的某个地方:
var render = Module.cwrap('render_djvu', 'number', ['string']);
Run Code Online (Sandbox Code Playgroud)
呼叫:
FS.createDataFile("/", "test.djvu", byteArray, true, true);
removeRunDependency();
var heapPointer = render('test.djvu');
FS.truncate('test.djvu', 0);
FS.unlink('test.djvu');
Run Code Online (Sandbox Code Playgroud)
PS:
项目代码:https://github.com/saint3k/reader,C分支.reader-js中的索引文件.使用pre.js和post.js文件在a.out.js中编译代码.要重建,请在minidjvu文件夹中使用./compile.sh.
我解决了这个问题。我不明白,如果你在 C/C++ 程序中分配内存,而该程序将在 JS 中编译。我认为每次调用 EMScripten 都会生成新的清晰环境,但事实并非如此,该环境将被重用。所以我们还是关心内存泄漏的问题。
| 归档时间: |
|
| 查看次数: |
2747 次 |
| 最近记录: |