c# - 内存映射文件被加载到进程的用户模式地址空间或内核地址空间?

标签 c# .net memory-management memory-mapped-files

我一直在阅读有关 memory mapped files 的内容,它允许跨多个进程共享文件。

每个进程(具体为 32 位)都有 4GB 的私有(private)地址空间,分为 2GB 用户模式地址空间2GB 为内核保留,如 here 所述通过 Eric Lippert 。用户模式地址空间是每个进程私有(private)的,不能被其他进程修改。

那么,这是否意味着 MMF 被映射到内核模式地址空间,因为它在所有进程之间共享?

我搜索了很多关于 MMF 映射的地方,但找不到任何说明这一点的资源。所以,如果我的假设是正确的或者我在这里遗漏了什么,请在这里发布问题? MSDN 的任何资源也很好。

最佳答案

内存映射文件被映射到用户模式地址空间。

这样想。假设您有一个 4K 文件,该文件被内存映射到两个进程中。这仅仅意味着磁盘上的一个存储页面与两个进程中每个进程中的特定虚拟地址空间页面相关联。

此页面上的图 3 可能会有所帮助:

http://msdn.microsoft.com/en-us/library/ms810613.aspx

关于c# - 内存映射文件被加载到进程的用户模式地址空间或内核地址空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23594414/

相关文章:

c - 如何通过指向设备数组Cuda的指针数组指向cudaMemcpy主机值

c# - 请求的资源正在使用中。 (来自 HRESULT : 0x800700AA) - Microsoft WebView 的异常

c# - 无法访问我的扩展方法

c - 将值赋给 ScanF 中的 char *

c# - .Net 中当前 CultureInfo 的距离单位

c# - EF 创建数据库并在其名称中添加 guid

c# - 将 char 数组从 c# 传递到 c++ dll

c# - Web API 返回转义的 JSON

.net - 如何使用反射判断类/方法是否可访问?

php - 优化php和mysql的内存管理