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

时间:2016-02-21 05:28:50

标签: c++ windows memory-mapped-files

我一直在假设

工作
  1. 创建内存映射文件
  2. 创建视图
  3. 做事
  4. 取消地图视图
  5. 发布文件
  6. 然而,出现了一种情况,即在释放文件后取消映射视图会更加方便,因此交换步骤4和5.我测试了它,没有错误,一切都好。尽管如此仍然感到腥。我在微软文档中没有看到任何关于此的内容,是否有人知道这种做法是否安全?我显然没有在释放文件和取消映射之间使用视图。

2 个答案:

答案 0 :(得分:0)

在第3步之后,你完全完成访问视图吗?从视图深处复制到您需要的所有内容吗?如果是这样,取消映射/释放就没问题了。

答案 1 :(得分:0)

根据https://github.com/h5py/h5py/blob/4ee8f89b6dc658fdea5dc62d0f29058121928cfe/h5py/h5o.pyx#L172允许。

  

即使文件视图仍处于打​​开状态,对CloseHandle的这些调用也会成功。但是,保留映射的文件视图会导致内存泄漏。

如果可能的话,我仍然希望首先取消映射视图,只是为了清晰起见。