English 中文(简体)
使用CreateFileMapping在页面文件中分配页面的目的是什么?
原标题:
  • 时间:2008-11-20 22:17:28
  •  标签:

函数CreateFileMapping可以用来在页面文件中分配空间(如果第一个参数是INVALID_HANDLE_VALUE)。 分配的空间可以稍后映射到进程虚拟地址空间中。

为什么我要使用这个,而不只是使用VirtualAlloc

似乎这两个函数做的几乎一样。 VirtualAlloc 分配的内存可能在某些时候被推送到页面文件中。那么,为什么我需要一个专门请求首先将我的页面分配到那里的 API 呢?我为什么要关心我的私有页面位于哪里?

这只是对操作系统关于我预期的内存使用模式的一种提示吗?(即前者是更积极地提示交换出那些页面。)

还是说它只是在32位进程处理非常大的数据集时的一种方便方法吗?(即,我可以使用CreateFileMapping进行> 4Gb的分配,然后根据需要将较小的块映射到内存中的空间。使用页面文件可以省去手动管理自己的文件集以“交换”的工作。)

附言:我的这个问题是来自我最近读到的一篇文章:http://blogs.technet.com/markrussinovich/archive/2008/11/17/3155406.aspx

最佳回答

从CreateFileMapping函数:

A single file mapping object can be shared by multiple processes.

虚拟内存可以在多个进程之间共享吗?

问题回答

一个原因是在不同的进程之间共享内存。通过只知道映射对象的名称,不同的进程可以通过页文件进行通信。这比创建一个真正的文件并进行通信更可取。当然,可能还有其他用例。您可以参考 MSDN 上的使用文件映射进行 IPC以获取更多信息。





相关问题
热门标签