【问题标题】:Concerns using Shared Memory with CreateFileMapping and MapViewofFile使用带有 CreateFileMapping 和 MapViewofFile 的共享内存的问题
【发布时间】:2012-01-26 08:56:11
【问题描述】:

我有 2 个关于使用共享内存的问题。我正在使用 CreateFileMapping 在两个进程之间创建共享内存区域。

1) 我知道我需要在 CreateFileMapping 或 OpenFileMapping 调用返回的每个句柄上调用 CloseHandle 以释放内存。我的问题是,如果使用共享内存的程序在没有调用 CloseHandle 的情况下退出,所有句柄是否都会被适当地关闭并被 Windows XP/7 释放内存? IE - 在所有使用 mem 的进程都已关闭后,是否存在 mem 泄漏的可能性?

2) 我使用 MapViewofFile 来获取指向内存的指针。在一个实例中,我假设共享内存将始终存在于方法的上下文中。因此,我将 MapViewOfFile 的返回值保存为指针并关闭了 mem 的句柄,我只是使用指向共享 mem 的指针(但仍锁定对它的访问)。这安全吗,还是每次访问共享内存时都应该调用 MapViewOfFile?

谢谢,

伊恩

【问题讨论】:

    标签: c++ windows memory-leaks shared-memory memory-mapping


    【解决方案1】:

    1) 是的,当进程终止时,所有句柄都会关闭,无论它是死了还是很好地结束。这里没有泄漏。

    2) 只要​​不调用UnmapViewOfFile,即使句柄已经关闭,内存仍然可以被进程访问:

    虽然应用程序可能会关闭用于创建文件映射对象的文件句柄,但系统会保持相应文件处于打开状态,直到文件的最后一个视图被取消映射

    【讨论】:

      猜你喜欢
      • 2015-08-08
      • 1970-01-01
      • 2012-06-19
      • 2011-02-07
      • 2017-11-11
      • 2010-12-25
      • 2019-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多