我有一组文件,其长度都是我操作系统(FreeBSD 10)页面大小的倍数.我想将mmap()
这些文件连接到RAM的连续页面,这使我能够将一组文件视为一个大型数据.
最好使用便携式功能,如何找到一个足够大的未映射地址空间区域,这样我才能确定mmap()
对该区域的一系列调用是否会成功?
跟着这些步骤:
首先计算枚举文件并总结其大小所需的总大小.
映射此大小的单个匿名内存区域mmap
.如果失败了,你输了.
保存指针和unmap
区域(实际上,unmap
如果mmap
具有固定地址的系统隐式取消映射任何先前的重叠区域,则可能不需要).
使用适当的MAP_FIXED
标志映射此地址的第一个文件.
按文件大小增加地址.
循环到步骤4,直到所有文件都已映射.
这应该可以完全移植到任何POSIX系统,但是某些操作系统可能会有一些阻止这种方法的怪癖.试试吧.