我对内存映射文件非常陌生,而且我对某些东西有点失落。内存映射文件 - 映射结构而不是文件?
我知道,如果我有一个文件,我可以加载它,并在一次使用MMaps从各种工艺访问它。
但在我的情况,我创建连接方法A,一个DLL,而该DLL被赋予一个指针,该进程A已准备了C表面。我需要与Process B分享这个cSurface的数据。我真的不想调用一个空白的MMap,并将我的Process A的表面复制到它中,只是在过程B中将它复制出来。
是吗?可能映射我的表面,就好像它是一个文件一样,所以当MMap创建时它已经指向表面数据(就像我加载SomeTextFile.txt一样)?
我的计划理论上是接收一个指向Proc A表面的指针,告诉窗口与给定名称共享该表面的内存,并使用Mutexes来协调访问 - 这个想法是两个进程都读取表面同样的物理副本,不需要繁琐的复制。
这可能吗?
只是想我会让我的帖子更清晰一点。假设我有一个名为'char buffer [SUPER_MASSIVE]'的巨大缓冲区和一个名为'hSuperMassiveFile'的巨大文件。我可以通过'CreateFileMapping(hSuperMassiveFile,...)'来分享SuperMassiveFile,但是我想对我的缓冲区做同样的事情。有没有办法做'CreateFileMapping((HANDLE)缓冲区,...)'而不是共享我的缓冲区,而不需要请求一个空映射,然后'CopyMemory()'我的缓冲区到它呢? – 2012-01-12 14:25:09