如何将已经在内存中的地图数据存储到文件中

问题描述:

我正在研究一个程序,它需要一次将多达几百张图像加载到内存中。每个文件占用100MB,所以我不想将它们全部存储在内存中。我想要内存映射这些文件,以便操作系统在必要时将它们交换出来以节省物理内存。这是我想知道的。如果我已经在malloced内存中拥有了我想要的数据,那么我应该打开文件描述符,使用write()将数据写入文件,然后映射文件。或者我可以用内存映射一个新文件,然后使用memcpy复制数据。如果我要创建一个新文件,并且当我调用mmap时给它一个比文件大小更大的长度,它只会增加磁盘上文件的大小?如何将已经在内存中的地图数据存储到文件中

根据POSIX标准:“mmap()函数可用于映射大于对象当前大小的内存区域。映射内但超出底层对象的当前端存储的访问可能会导致SIGBUS信号发送到进程。”(http://pubs.opengroup.org/onlinepubs/9699919799/

这就是说,你可以在你刚刚编写的同一存储区域尝试mmap()MAP_FIXED从,如果你从页面对齐aligned_alloc()而不是malloc(),或免费,然后mmap()。但请注意,操作系统将页面内存,你有一段时间没有使用交换,你可以用posix_madvise()帮助它。

+0

我知道掉期。但是说我在一个只有2GB内存和另一个2GB交换的系统上,我需要处理30GB的图像。这就是为什么我要mmap文件。 – chasep255