Emscripten:IDBFS 的 RAM 效率是否高于 MEMFS?

标签 emscripten

我正在使用 emcc --preload-file 命令为我的 WebAssembly 游戏打包数据,该命令将其放入 MEMFS 并保存在 RAM 中,直到网页关闭。

游戏通常会打开一个文件,读取它的内容,然后关闭它,并且再也不会触及该文件,它不使用 mmap

在首次启动时将所有游戏数据下载到 IndexedDB/Emscripten IDBFS 会更节省内存吗? Web 浏览器是否将整个 IndexedDB 加载到 RAM 中,它是否在 IDBFS 中的文件关闭后释放 RAM?

我的目标硬件是 iPhone XS 上的 Safari,内存为 2GB,游戏数据约为 60MB。

最佳答案

我相信接受的答案没有强调有关 Emscripten 的 IDBFS 的重要技术细节。

IDBFS 是 MEMFS 之上的附加层,具有通过 syncfs 调用添加的持久性功能。

所有文件系统内容都存在于内存中,并且可以选择在使用前从 IndexedDB 加载(通过调用 syncfs(true, ...))和/或在使用后保存到 IndexedDB 中(syncfs(false, ...)).

在当前的实现中,您无法通过使用 IDBFS 来阻止额外的内存使用。 IDBFS 就像一个 ramdisk,可以从/同步到持久存储。它不像直接挂载持久存储。

关于Emscripten:IDBFS 的 RAM 效率是否高于 MEMFS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67436377/

相关文章:

emscripten - 在 emscripten 中禁用链接 libc

javascript - 在 emscripten 中处理输出缓冲区

javascript - Emscripten - 如何为采用 float**、float** 和 unsigned long 的 C 函数定义 getFuncWrapper 签名?

xmlhttprequest - Emscripten XMLHttpRequest 调用的 C++ 端是什么?

c - 模拟 XMM 内在函数时在 WebAssembly 中进行对齐检查?

c++ - 从 Asm.js/emscripten 启用 WebGL 扩展?

javascript - Emstripten 可以编译 iostream 库吗?

javascript - Emscripten 生成的代码的 Chrome 分析器中人类可读的函数名称

javascript - asm.js 对编译器的限制

emscripten - 错误 : unknown argument: '-nostdsysteminc' in Emscripten