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

标签 winapi memory

函数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/

相关文章:

c++ - 如何从隐藏文件夹运行程序 WinAPI

c++ - 如何使用windows api获取输入

c++ - 如何安全删除多个指针

c - 迭代列表 lst 并将函数 f 应用于每个链接以创建 “fresh” 列表

c++ - WritePrivateProfileStruct 有大小限制吗?

c++ - 使用命名管道 WinAPI 的异步 I/O

java - Java中的数组以及它们如何存储在内存中

c++ - 将流加载到程序勺外的内存中

c - 使用 memset() 函数及其如何影响内存块

c++ - 任何 Win32 SDK 编程教程?