大文件内存管理

时间:2013-08-31 18:42:20

标签: c file memory mmap

我正在寻找有关如何在我的库中透明和明智地处理对大型(由大于可寻址内存定义)文件/块设备的访问的帮助。假设我们在32位架构上拥有512GB大小的块设备。 512GB是我们在32位架构上解决的问题,而使用mmap()管理内存中部分设备/文件是我想要避免的。

我想要实现的是,获取被解析为64位数字/偏移的块,并且这些块是任意的但是每个设备的静态大小(512字节,4K,8K,64MB等)。调用者应该只获取内存地址,不需要注意释放内存或将实际内容加载到内存中。

我正在考虑如下机制:

  • 类似于void* get_file_address(unit64_t blk_offset)调用取一个偏移量(块号)并检查是否已映射此块,如果没有读入并因此映射它
  • 跟踪块访问次数的一些结构(每get_file_address次调用更新)
  • 内存管理器,如果内存不足并且使用前面提到的结构开始卸载很少使用的块,可以使用

最后一点让我感到恼火:自己写一个记忆管理员似乎并不理智。另外,我确信我不是第一个遇到这个问题的人。

那么有没有任何解决方案/库/代码片段已经有助于管理这样或类似的案例?我对Win,Linux,* BSD或OS X的解决方案没问题。

1 个答案:

答案 0 :(得分:1)

我会使用“framed mmap”和“大文件支持”,这是Linux的一部分。 从Wikipedia文章开始,然后转到技术详细信息within the SuSE web site

some examples上还有here在线和一些stackoverflow的答案。 我认为你不能轻易找到一些预煮库。 与上述链接建议一样,处理大型多媒体文件的软件源代码可能会有所帮助,而且它们的“框架”性质可能会产生一些有趣的片段。