代码之家  ›  专栏  ›  技术社区  ›  pauldoo

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

  •  3
  • pauldoo  · 技术社区  · 16 年前

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

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

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

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

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

    2 回复  |  直到 16 年前
        1
  •  4
  •   Kieveli    16 年前

    从CreateFileMapping函数:

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

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

        2
  •  1
  •   Szere Dyeri    16 年前

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