使用CreateFileMapping和MapViewofFile时的共享内存问题

3

我有两个关于使用共享内存的问题需要解决。我使用CreateFileMapping在两个进程之间创建一个共享内存区域。

1) 我知道我需要对从CreateFileMapping或OpenFileMapping调用返回的每个句柄调用CloseHandle以释放内存。我的问题是,如果使用共享内存的程序退出而没有调用CloseHandle,所有句柄是否得到适当关闭和内存释放?也就是说,在关闭了使用内存的所有进程后,是否存在内存泄漏的可能性?

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

谢谢,

Ian

1个回答

7

1) 是的,当一个进程终止时,所有的句柄都会关闭,无论它是死亡还是正常完成。这里没有泄漏。

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接