内存映射&虚拟内存

内存映射&虚拟内存

相同点:

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值