虚拟内存与内存映射文件区别与联系

转自:http://blog.sina.com.cn/s/blog_4eee98350100abbr.htmlhtml

虚拟内存与内存映射文件是操做系统内存管理的重要部分,两者有类似也有不一样的地方,本文是做者学习与应用中获得的一些体会,有错误的地方,请提点。架构

两者的联系:虚拟内存与内存映射文件都是将一部份内容加载的内存,另外一部分放在磁盘(硬盘)上的一种机制。两者都是应用程序动态性的基础。因为两者的虚拟性,对于用于而言,都是透明的。性能

学过操做系统的都知道虚拟内存其实就是硬盘的一部分,是计算机RAM与硬盘的数据交换区。由于实际的物理内存可能远小于进程的地址空间,这就须要把内存中暂时不用到的数据放到硬盘上一个特殊的地方,当请求的数据不在内存中时,系统产生却页中断,内存管理器便将对应的内存页从新从硬盘调入物理内存。在Windows系统,硬盘中这部分空间是一个文件,即系统目录下的pagefile文件。学习

内存映射文件是由一个文件到一块内存的映射,使应用程序能够经过内存指针对磁盘上的文件进行访问,其过程就如同对加载了文件的内存的访问,所以内存文件映射很是适合于用来管理大文件。spa

虚拟内存实现的硬件基础是分页机制,关于分页机制本文再此不作介绍。虚拟内存实现的另一个重要基础是局部性原理。局部性是指程序老是趋向于使用最近使用过的数据和指令,也就是说程序执行时所访问的存储器地址分布是相对集中的。局部性原理是应用虚拟内存提高性能的主要缘由,也是虚拟内存却别与内存映射文件的本质。内存映射文件虚拟性并非因为局部性,而是使进程虚拟地址空间的某个区域创建映射磁盘文件的所有或部份内容,经过该区域能够直接对被映射的磁盘文件进行访问,而没必要执行文件I/O操做也无需对文件内容进行缓冲处理。操作系统

另外,虚拟内存使用硬盘只能是页面文件,而内存映射使用的磁盘部分能够是任何磁盘文件。指针

最后,两者的架构不一样,或者说是应用出发点不一样。虚拟内存是架构在物理内存之上,其引入是由于实际的物理内存运行程序所需的空间,即便如今计算机中的物理内存愈来愈大,程序的尺寸也在增加。将全部运行着的程序所有加载到内存中不经济也很是不现实。内存映射文件架构在程序的地址空间之上,在Win32中,地址空间只有4G,而某些大文件的尺寸可要要远超出这个值,所以,用地址空间中的某段应用文件中的一部分可解决处理大文件的问题,在Win32中,使用内存映射文件能够处理2的64次(64EB)大小的文件.缘由内存映射文件,除了处理大文件,还可用做进程间通讯,在此不作详解。htm