使用内存映射还是未锁定的流操作?

时间:2011-09-27 02:15:25

标签: c linux posix memory-mapped-files

我正在为Linux下的FAT32开发一个FUSE实现(我知道这已经在Linux内核中可用,但这是一个学校作业)。 FAT32文件系统是使用mkfs.msdos命令创建的,稍后我将使用posix_madvise将其映射到内存中,或通过posix_fadvise使用未锁定的流。

我不确定我应该根据自己的选择做什么,我的意思是,每种方法的优点和缺点是(在性能,内存使用等方面)。我已经看到了一些将madvisemmap结合使用的示例,但没有提供有关fadvise是否也应与mmap一起使用的信息,或者首先,fadvise / madvise和POSIX实施posix_fadvise / posix_madvise之间存在差异。

非常感谢正确方向的任何一点。

1 个答案:

答案 0 :(得分:0)

除非您想将自己限制在~2.5 GB文件系统或需要64位计算机,否则您的选择是使用mmap并动态管理您保留映射的文件系统的哪个部分,或使用正常的读/写操作。我可能会选择后者。 mmap被高估为性能优化,并且有填补虚拟地址空间的缺点,因此当您真正需要将文件视为内存时,我倾向于仅使用mmap - 例如,存储您希望提供给仅接受内存数据的API的进程共享同步对象,可执行代码或大数据(例如,qsort)。