【发布时间】:2018-07-12 17:29:08
【问题描述】:
为什么我们不能在 Windows 上截断内存映射文件?假设我已经映射了 4kb 文件并且只使用了 2kb。所以要截断 2kb,我需要先取消映射映射文件,然后截断它。为什么会这样? API有问题还是我的理解有误?
【问题讨论】:
-
相当基础,而不是它的设计方式。创建一个仅将部分文件内容映射到内存的视图是完全正常的,实际上在过去很常见。它不可能假设程序决定不映射的内容是需要删除的垃圾。例如,当程序崩溃时,真是太可惜了。增大文件不是问题,程序员的意图很明确。
-
您是否考虑过使用稀疏文件?它不允许你截断文件,但如果你不写入文件的某个区域,它不会占用空间。
-
我尝试了内存映射文件,我可以看到磁盘上的文件大小与我在 createFileMapping API 中提供的大小相等。因此,即使我没有在文件中写入任何内容,我也会看到非零文件大小。并说要将那个空文件截断一半,我必须先取消映射文件。
标签: windows memory-mapped-files memory-mapping