释放内存映射文件后取消映射视图是否安全?

Is it safe to unmap a view after releasing the memory mapped file?

我一直在假设

下工作
  1. 创建内存映射文件
  2. 创建视图
  3. 做事
  4. 取消映射视图
  5. 发布文件

但是,出现了一种情况,在释放文件后取消映射视图会更方便,因此交换步骤 4 和 5。我测试了它,没有错误,一切都很好。不过还是觉得有点腥。我在微软文档中没有看到任何关于此的信息,有人知道这种做法是否安全吗?我显然没有在释放文件和取消映射之间使用视图。

完成第 3 步后,您是否完全完成了对视图的访问?您需要从其他地方深度复制视图的所有内容吗?如果是这样,unmapping/releasing就好了。

根据MSDN,这是允许的。

These calls to CloseHandle succeed even when there are file views that are still open. However, leaving file views mapped causes memory leaks.

为了清楚起见,如果可能的话,我仍然更喜欢先取消映射视图。