Windows上的内存映射文件截断

时间:2018-07-12 17:29:09

标签: windows memory-mapped-files memory-mapping

为什么我们不能截断Windows上的内存映射文件?假设我已映射4kb文件,仅使用了2kb。因此,要截断2kb,我需要先取消映射文件的映射,然后再截断它。为什么会这样呢? API是否存在问题,或者我的理解是错误的?

1 个答案:

答案 0 :(得分:0)

因为在Windows上一旦映射了文件区域,就无法将其删除。

将32kb文件映射到内存,然后将其截断为0时会发生什么。访问该映射后会发生什么?在POSIX系统上,内存访问将生成一个信号,这可能会使您的进程崩溃。在Windows上根本不允许这样做。

这种行为应该使使用内存映射文件的编程更容易,因为处理错误代码更容易处理信号。

因此,CreateFileMapping将文件大小扩展到创建的映射对象的大小。