我一直在阅读有关memory mapped files,它允许跨多个进程共享文件。内存映射文件被装入用户态地址空间或进程内核地址空间?
每个进程(32位是特异性的)具有专用地址空间4GB其通过Eric Lippert分为2GB的用户模式地址空间和2GB保留用于内核如上所述here。用户模式地址空间对每个进程是私有的,不能被其他进程修改。
那么,这是否意味着MMF被映射到内核模式地址空间,因为它在所有进程之间共享?
我已经搜索了很多关于MMF的地方,但它找不到任何资源说明。所以,在这里发布问题,如果我的假设是正确的,或者我在这里错过了什么?任何资源到MSDN也会很好。
这是比这更复杂一些。其他进程不能直接访问地址空间的任何部分。然而,你可以明确地将你的地址空间的一部分与其他进程共享,并且给予正确的进程权限,一个外部进程*可以*访问你的进程的内存(这基本上就是调试器所做的)例如 – jalf
@jalf - 私人我的意思是,一个地址空间的用户模式不能被其他进程写入。 –
当进程写入指针时,这是一个虚拟指针。操作系统决定它写入的实际内存。如果您已经指示操作系统两个不同进程中的两个不同虚拟指针发生映射到同一个后备存储,则一个进程可以写入内存,而另一个进程可以看到该更改。 –