《Windows核心编程》之“内存映射文件”

内存映射文件是Windows高效处理大文件的一种机制,它将文件直接映射到进程地址空间,常用于exe/dll加载、数据文件访问和进程间共享数据。内存映射能减少IO操作,提高效率,并在多进程间实现数据一致性。
摘要由CSDN通过智能技术生成

        一般来说,应用程序对文件的操作分为两类:第一类是操作文件本身,包括new、delete、cut、copy、paste以及获取或修改文件属性等操作;第二类就是操作文件的内容,包括:read、write以及文件指针,事实上,cut、copy和paste从实现上来说,也是文件内容操作。对于第二类操作,通行的做法是设计一个buffer(它对应进程地址空间的一个区域),先把待操作的内容读入到buffer,然后操作buffer(比如使用字符串处理函数),最后将有效的内存从buffer写入文件。但是,在操作大文件的时候,这种buffer设计的效率就比较低了。为此,Windows提供了一种更高效的处理大文件的机制——“内存映射文件”。

        内存映射文件的实际就是,将磁盘上的文件直接映射到进程地址空间。与虚拟内存相似,内存映射文件运行开发人员预订一块地址空间区域并给区域调拨物理存储器。不同的是,内存映射文件的物理存储器来自磁盘上已有的文件,而不是来自系统的pagefile。一当把文件映射到地址空间,我们就可以对它进行访问,就好像整个文件都已被载入内存了一样。

        内存映射文件主要用于以下三种情况:

1)系统使用内存映射文件载入并 运行.exe和动态链接库.dll文件。这大量节省了系统的pagefile空间以及应用程序启动的时间。

2)开发人员可以用内存映射文件来访问磁盘上的数据文件。这使得我们可以避免直接对文件进行IO操作和对文件进行缓存。

3)通过使用内存映射文件,我们可以在同一台机器的不同进程之间共享数据。Windows提供的其他进程间传输数据的方法,都是通过内存映射文件来实现的,故内存映射文件共享数据的效率最高。


一、exe或dll文件映射到地址空间

        当用户在Windows中双机一个*.exe,文件管理器会调用“CreateProcess”(该函数需要传入“*.exe”字符串作为参数),然后

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值