截断内存映射文件

Truncating a memory mapped file

本文关键字:文件 映射 内存      更新时间:2023-10-16

我目前正在使用Boost。Iostreams到内存映射多个文件,用于写入非常大的数据集。写入的数据量变化,但保证不会超过预定义的限制。通常使用映射文件的全部容量,但有时不使用,只写入很小的一部分。

我的问题是我事先不知道要写入的数据量,所以每个内存映射文件都以相同的大小创建。因此,程序效率较低,因为未被使用到其全部容量的文件在关闭时被填为零。

在使用Boost关闭文件之前是否有截断文件的方法?Iostreams或其他跨平台库(最好是boost)?

我知道还有其他类似的问题,但我不认为他们提供了一个跨平台的解决方案。

您可以使用truncate(2)ftruncate(2)系统调用截断现有文件的大小。

注意,在截断之前,应该使用munmap()文件。如果您查看mmap(2)手册页的内容,它说明截断映射文件是未定义的行为。

但是,在截断文件之前进行munmap()应该不会违反任何规则。