为什么我们不能截断Windows上的内存映射文件?假设我已映射4kb文件,仅使用了2kb。因此,要截断2kb,我需要先取消映射文件的映射,然后再截断它。为什么会这样呢? API是否存在问题,或者我的理解是错误的?
答案 0 :(得分:0)
因为在Windows上一旦映射了文件区域,就无法将其删除。
将32kb文件映射到内存,然后将其截断为0时会发生什么。访问该映射后会发生什么?在POSIX系统上,内存访问将生成一个信号,这可能会使您的进程崩溃。在Windows上根本不允许这样做。
这种行为应该使使用内存映射文件的编程更容易,因为处理错误代码更容易处理信号。
因此,CreateFileMapping
将文件大小扩展到创建的映射对象的大小。