截断内存映射文件
Truncating a memory mapped file
我目前正在使用Boost。Iostreams到内存映射多个文件,用于写入非常大的数据集。写入的数据量变化,但保证不会超过预定义的限制。通常使用映射文件的全部容量,但有时不使用,只写入很小的一部分。
我的问题是我事先不知道要写入的数据量,所以每个内存映射文件都以相同的大小创建。因此,程序效率较低,因为未被使用到其全部容量的文件在关闭时被填为零。
在使用Boost关闭文件之前是否有截断文件的方法?Iostreams或其他跨平台库(最好是boost)?
我知道还有其他类似的问题,但我不认为他们提供了一个跨平台的解决方案。
您可以使用truncate(2)
或ftruncate(2)
系统调用截断现有文件的大小。
注意,在截断之前,应该使用munmap()
文件。如果您查看mmap(2)
手册页的内容,它说明截断映射文件是未定义的行为。
但是,在截断文件之前进行munmap()
应该不会违反任何规则。
相关文章:
- GCC链接器 - 将存档中的所有对象文件映射到特定部分
- 为什么我无法使用文本文件创建文件映射?
- 如何通过文件映射对象重新映射共享内存的视图?
- 共享数据文件映射
- 频繁访问文件映射内存
- 如何在Windows和更高版本上保留内存,并将文件映射到内存中
- 文件映射对象和文件对象可以互换使用吗
- 如何在C++中创建文件映射
- 使用文件映射从文件中读取数据
- 打开文件映射问题,找不到文件映射
- 将几个大文件映射到内存
- 文件映射和文件结构
- Windows CreateFileMapping:具有相同支持文件的不同文件映射对象
- 文件映射IPC挂起MapViewOfFile调用
- 使用C++中的文件映射对象进行读取
- 如何正确使用文件映射并将数据传递给子进程
- 文件映射打开(Windows)
- 循环文件映射会降低性能
- 内存映射文件-映射结构而不是文件
- 将一个文件映射到内存,然后获取到该内存的文件描述符