Chinaunix首页 | 论坛 | 博客
  • 博客访问: 90553
  • 博文数量: 10
  • 博客积分: 1430
  • 博客等级: 上尉
  • 技术积分: 201
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-08 00:20
文章分类

全部博文(10)

文章存档

2010年(8)

2009年(1)

2008年(1)

我的朋友

分类: WINDOWS

2009-02-10 18:41:59

原文来自MSDN,本文为翻译稿。
 
    文件映射与部分进程虚拟地址空间一起构成一个文件内容关联(association)。系统创建一个文件映射对象(又称为片段对象)来维护这个关联。文件视图是访问文件内容的一个进程的部分虚拟地址空间。文件映射对象允许进程去使用输入、输出,也允许进程高效的对大数据文件进行工作,比如数据库,而不用映射整个文件进入内存。多进程情况下也可以使用内存映射文件来共享数据。
    进程通过指针来读取和写入文件视图(a file view),就像动态分配内存一样。通过使用文件映射可以提高效率,因为文件常驻磁盘,而文件视图常驻内存。进程通过VirtualProtect函数操作文件视图。
    下面图片现实了常驻磁盘文件、文件映射对象以及文件视图的关系:
   
    您想要映射到内存的磁盘文件可以是任何文件,也可以是系统页文件。文件映射对象可有整个文件或者部分文件构成,是磁盘文件的备份。这就意味着文件映射对象的页和系统交互的时候,任何改变都对该文件做写入操作,当文件映射对象在交互回来的时候,也重新存储这份文件。
    而文件视图有一个或者部分文件映射对象组成。进程通过文件视图来操作文件。进程可以创建一个文件映射对象的多个文件视图。每个进程创建的这些文件视图常驻在进程的虚拟地址空间中。当一个进程需要的数据不再当前创建的这些文件视图的时候,该进程会创建新的文件视图。
    多进程使用同一个文件映射对象创建本地文件视图的时候,数据是一致的。也就是说,这些文件视图是磁盘文件的副本。如果您想在多个进程中共享内存,那么文件不能是远程计算机上的数据。
阅读(1386) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~