使用CreateFileMapping在页面文件中分配页面的目的是什么?

时间:2008-11-20 22:17:28

标签: winapi memory

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

为什么我要这样做而不只是使用VirtualAlloc

似乎这两个功能几乎完全相同。 VirtualAlloc分配的内存可能会在某个时候被推送到页面文件。为什么我需要一个专门请求在第一个实例中分配我的页面的API?我为什么要关心私人网页的居住地点?

这只是操作系统提示我预期的内存使用模式吗? (即,前者是提示更积极地换掉这些页面。)

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

PS。这个问题是我最近阅读的一篇文章引发的:http://blogs.technet.com/markrussinovich/archive/2008/11/17/3155406.aspx

2 个答案:

答案 0 :(得分:3)

来自CreateFileMappingFunction:

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

虚拟内存可以跨多个进程共享吗?

答案 1 :(得分:1)

一个原因是在不同进程之间共享内存。通过仅知道映射对象的名称的不同进程可以通过页面文件进行通信。这比创建真实文件和进行通信更可取。当然可能还有其他用例。您可以参考MSDN上的Using a File Mapping for IPC了解更多信息。