函数CreateFileMapping可用于在页面文件中分配空间(如果第一个参数是INVALID_HANDLE_VALUE)。分配的空间稍后可以内存映射到进程虚拟地址空间。
为什么我要这样做而不是仅使用 VirtualAlloc ?
看起来这两个函数几乎做同样的事情。 VirtualAlloc 分配的内存可能在某些时候被推送到页面文件。为什么我需要一个专门请求在第一个实例中分配我的页面的 API?我为什么要关心我的私有(private)页面所在的位置?
这只是向操作系统暗示我预期的内存使用模式吗? (即,前者是更积极地交换这些页面的提示。)
或者它只是在 32 位进程上处理非常大的数据集时的一种便捷方法? (即,我可以使用 CreateFileMapping 进行 >4Gb 分配,然后根据需要内存映射较小的空间 block 。使用页面文件可以节省我手动管理自己的文件集以“交换”到的工作。)
PS。这个问题是由我最近阅读的一篇文章引发的:http://blogs.technet.com/markrussinovich/archive/2008/11/17/3155406.aspx最佳答案
来自 CreateFileMappingFunction:
A single file mapping object can be shared by multiple processes.
虚拟内存可以在多个进程之间共享吗?
关于winapi - 使用 CreateFileMapping 在页面文件中分配页面的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/307060/