我正在寻找有关如何在我的库中透明和明智地处理对大型(由大于可寻址内存定义)文件/块设备的访问的帮助。假设我们在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的解决方案没问题。
答案 0 :(得分:1)
我会使用“framed mmap”和“大文件支持”,这是Linux的一部分。 从Wikipedia文章开始,然后转到技术详细信息within the SuSE web site。
在some examples上还有here在线和一些stackoverflow的答案。 我认为你不能轻易找到一些预煮库。 与上述链接建议一样,处理大型多媒体文件的软件源代码可能会有所帮助,而且它们的“框架”性质可能会产生一些有趣的片段。