我正在为Linux下的FAT32开发一个FUSE实现(我知道这已经在Linux内核中可用,但这是一个学校作业)。
FAT32文件系统是使用mkfs.msdos
命令创建的,稍后我将使用posix_madvise
将其映射到内存中,或通过posix_fadvise
使用未锁定的流。
我不确定我应该根据自己的选择做什么,我的意思是,每种方法的优点和缺点是(在性能,内存使用等方面)。我已经看到了一些将madvise
与mmap
结合使用的示例,但没有提供有关fadvise
是否也应与mmap
一起使用的信息,或者首先,fadvise
/ madvise
和POSIX实施posix_fadvise
/ posix_madvise
之间存在差异。
非常感谢正确方向的任何一点。
答案 0 :(得分:0)
除非您想将自己限制在~2.5 GB文件系统或需要64位计算机,否则您的选择是使用mmap
并动态管理您保留映射的文件系统的哪个部分,或使用正常的读/写操作。我可能会选择后者。 mmap
被高估为性能优化,并且有填补虚拟地址空间的缺点,因此当您真正需要将文件视为内存时,我倾向于仅使用mmap
- 例如,存储您希望提供给仅接受内存数据的API的进程共享同步对象,可执行代码或大数据(例如,qsort
)。