内存映射&虚拟内存
相同点:
1. 虚拟内存与内存映射文件都是将一部分内容加载的内存,另一部分放在磁盘(硬盘)上的一种机制。
2. 二者都是应用程序动态性的基础。对于用户而言是透明的。
不同点:
1. 理论基础不同
a) 虚拟内存的理论基础是,程序的局部性原理和分页机制。
b) 内存映射的原理是使进程虚拟地址空间的某个区域建立映射磁盘文件的全部或部分内容,通过该区域可以直接对被映射的磁盘文件进行访问,而不必执行文件I/O操作也无需对文件内容进行缓冲处理。
2. 适应的磁盘环境不一样
虚拟内存使用硬盘只能是页面文件,而内存映射使用的磁盘部分可以是任何磁盘文件。
3. 二者应用出发点不同
虚拟内存的出发点是弥补内存外存速度上的差异,以及物理内存小于程序运行的地址空间。从而将外存磁盘上的一部分数据或程序加载进内存。这些数据不一定是连续的。
内存映射的出发点是应用程序地址空间(WIN32下是 232 = 4G)小于文件的大小,对于某些大文件会远远大于4G。C++内存映射文件函数是:
HANDLECreateFileMapping(HANDLE hFile,
LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
DWORD flProtect,
DWORD dwMaximumSizeHigh,
DWORD dwMaximumSizeLow,
LPCTSTR lpName);
其中dwMaximumSizeHigh+ dwMaximumSizeLow = 64位,所以最大的映射文件大小是264 = 16EB