无法发布C 中的CreateFileMapping和MapViewOffile创建的共享内存

Cannot release shared memory created by CreateFileMapping and MapViewOfFile in C++

本文关键字:创建 MapViewOffile 共享 内存 CreateFileMapping 中的      更新时间:2023-10-16

我正在学习使用C 中共享内存的工作。我发现在Windows下,我需要使用CreateFileMapping和MapViewOffile功能。我想分享一系列char,所以我的代码的一部分是:

HANDLE hBuffer = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, size, bufferName);
char * buffer = (char *) MapViewOfFile(hBuffer, FILE_MAP_ALL_ACCESS, 0, 0, size);

(当然有检查nulls),在使用共享内存结束时,我调用:

UnmapViewOfFile(buffer); // returned true
CloseHandle(hBuffer); // returned true also

但是在资源监视器中,我可以看到没有发布内存。当被称为几次时,分配的应用程序内存正在增加,但没有释放。我究竟做错了什么?还是还有另一个功能可以发布共享内存?

感谢您的答案。

由于marcin_j:

解决了问题

您的代码看起来很查找(嗯,...您的手柄错误),您可以使用 来自sysinternals的procexp.exe,以通过名称找到您的句柄(如果是 找不到它是关闭的),也可以在性能选项卡上观察 您的应用程序的虚拟大小更改,也有算法计数 应该相应地改变。

另外,观察执行后会发生什么 memset(缓冲区,0,大小);在MapViewOffile之后 - 实际上是 系统将提交内存,何时您的工作集将上升。

我上面的评论是错误的 sec_commit构成内存。但是我想你的记忆是分本的 在调用MEMSET之前,该呼叫页面的页面被移至 物理内存,上升工作集。...如果我没有错...