使用CreateFileMapping和MapViewofFile共享内存的问题
Concerns using Shared Memory with CreateFileMapping and MapViewofFile
我有两个关于使用共享内存的问题。我正在使用CreateFileMapping来创建两个进程之间的共享内存区域。
1)我明白,我需要调用CloseHandle从CreateFileMapping或OpenFileMapping调用返回的每个句柄,以释放内存。我的问题是,如果使用共享内存的程序在没有调用CloseHandle的情况下退出,是否所有的句柄都适当地关闭和内存被Windows XP/7释放?IE -在所有使用内存的进程关闭后,内存是否有泄漏的可能?
2)我使用MapViewofFile来获得指向内存的指针。在一个实例中,我假设共享内存将始终存在于方法的上下文中。所以我把MapViewOfFile的返回值保存为一个指针,并关闭了mem的句柄,我只是使用指针指向共享的mem(但仍然锁定对它的访问)。这是安全的,还是我应该调用MapViewOfFile每次我访问共享内存?
谢谢,伊恩
1)是的,当进程终止时,所有句柄都关闭,无论它是死亡还是顺利结束。这里没有泄漏
2)只要你不调用UnmapViewOfFile
,内存仍然可以被进程访问,即使句柄已经关闭:
虽然应用程序可以关闭用于创建文件映射对象的文件句柄,但是系统将保持相应的文件打开,直到文件的最后一个视图被取消映射
相关文章:
- C++ 中 std::vector 的内存问题
- 实现快速排序的内存问题
- 此add_node函数会导致内存问题吗?
- C++:为什么这段代码给我内存问题/未定义的行为?
- 我不明白附加字符串的内存问题
- 是否有可能存在不会崩溃程序的内存问题
- 在发布版本中删除类指针会导致内存问题
- Android OpenCV 应用程序的内存问题
- 线程的内存问题(微小线程,C++)
- 递归结构的向量有内存问题
- C++合并排序内存问题
- 将智能指针发送到Protobaf.内存问题
- 潜在的动态内存问题
- JNI 中的内存问题
- C++Lambda函数关闭-内存问题
- 解决由全局静态变量引起的内存问题
- 类堆栈内存问题(致命错误)
- QNetworkAccessManager内存问题
- 读取进程内存问题未更新
- 类指针内存问题