【发布时间】:2014-06-28 22:51:59
【问题描述】:
我一直在阅读有关 memory mapped files 的信息,它允许文件在多个进程之间共享。
每个进程(具体为 32 位)都有 4GB 的私有地址空间,如所述 @ 987654322@Eric Lippert。用户态地址空间是每个进程私有的,不能被其他进程修改。
那么,这是否意味着 MMF 被映射到内核模式地址空间,因为它在所有进程之间共享?
我已经搜索了很多关于 MMF 的映射位置,但找不到任何说明这一点的资源。那么,如果我的假设是正确的或者我在这里遗漏了什么,请在这里发布问题? MSDN 的任何资源都很好。
【问题讨论】:
-
比这要复杂一些。其他进程无法直接访问地址空间的任何部分。但是,您可以与其他进程显式共享部分地址空间,并且在获得正确的进程权限的情况下,外部进程可以访问您的进程的内存(例如,调试器基本上就是这样做的)
-
@jalf - 我的意思是私有的,一个地址空间的用户模式不能被其他进程写入。
-
当一个进程写入一个指针时,它是一个虚拟指针。操作系统决定它写入的实际内存。如果您已指示操作系统,两个不同进程中的两个不同虚拟指针碰巧都映射到同一个后备存储,那么一个进程可以写入内存,而另一个进程可以看到这种变化。
-
这样想:你相信一个进程可以写一个文件,另一个进程可以读那个文件,并且一个进程的写对另一个进程可见吗? 内存就是磁盘文件,所以你认为可以使用文件的任何事情,你应该相信也可以使用内存。
标签: c# .net memory-management memory-mapped-files