windows中共享内存是如何实现的?

How is shared memory implemented in windows?

内存分配在哪里?新内存在哪个地址space?

Windows中有两种常见的共享内存类型。

一种是当多个进程将同一个文件映射到内存中时。这显然发生在可执行文件和库中,但也可能发生在数据文件中。基本上,进程共享此内存这一事实对其工作方式几乎没有影响。它是通过与映射单个进程时相同的请求分页实现的。

另一种类型是共享的匿名映射。这些可以通过调用 CreateFileMapping 函数而不指定要映射的有效文件来创建。这与分配内存一样,只是不止一个进程可以访问它。就像正常的内存使用一样,如果它不被访问或者如果出于其他目的需要 RAM,它可以被分页到磁盘。

对于共享的匿名映射,内核为进程提供内存句柄,以便进程在想要将其映射到内存时可以引用它space。