函数CreateFileMapping可以用来在页面文件中分配空间(如果第一个参数是INVALID_HANDLE_VALUE
)。 分配的空间可以稍后映射到进程虚拟地址空间中。
为什么我要使用这个,而不只是使用VirtualAlloc?
似乎这两个函数做的几乎一样。 VirtualAlloc 分配的内存可能在某些时候被推送到页面文件中。那么,为什么我需要一个专门请求首先将我的页面分配到那里的 API 呢?我为什么要关心我的私有页面位于哪里?
这只是对操作系统关于我预期的内存使用模式的一种提示吗?(即前者是更积极地提示交换出那些页面。)
还是说它只是在32位进程处理非常大的数据集时的一种方便方法吗?(即,我可以使用CreateFileMapping进行> 4Gb的分配,然后根据需要将较小的块映射到内存中的空间。使用页面文件可以省去手动管理自己的文件集以“交换”的工作。)
附言:我的这个问题是来自我最近读到的一篇文章:http://blogs.technet.com/markrussinovich/archive/2008/11/17/3155406.aspx