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

Winapi 使用CreateFileMapping在页面文件中分配页面的目的是什么?,winapi,memory,Winapi,Memory,该函数可用于分配页面文件中的空间(如果第一个参数无效\u HANDLE\u VALUE)。分配的空间稍后可以被内存映射到进程虚拟地址空间 为什么我要这样做而不是仅仅使用 看起来这两个函数的作用几乎相同。VirtualAlloc分配的内存可能在某个时候被推出到页面文件中。为什么我需要一个API专门要求在第一个实例中将我的页面分配到那里?为什么我要关心我的私人页面在哪里 这仅仅是向操作系统提示我的预期内存使用模式吗?(即,前者暗示要更积极地交换这些页面。) 或者,在32位进程上处理非常大的数据集时,

该函数可用于分配页面文件中的空间(如果第一个参数
无效\u HANDLE\u VALUE
)。分配的空间稍后可以被内存映射到进程虚拟地址空间

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

看起来这两个函数的作用几乎相同。VirtualAlloc分配的内存可能在某个时候被推出到页面文件中。为什么我需要一个API专门要求在第一个实例中将我的页面分配到那里?为什么我要关心我的私人页面在哪里

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

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


注:这个问题是由我最近读到的一篇文章引发的:

来自CreateFileMappingFunction:

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

虚拟内存能否跨多个进程共享?

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

啊,是的,答对了:我还没有理由在Win32上使用共享内存,所以我不知道CreateFileMapping是这样做的。那么这是否意味着Win32中的所有共享内存都是从页面文件分配的呢?在需要时交换的正常物理内存分配有什么问题?内存模型不允许您寻址位于另一个进程内存空间中的内存。