关于内存映射文件的理解,求指导
大狮兄 2014-05-03 11:37:51 昨天看到内存映射文件,比较吃力,今天总结了下自己对于内存映射文件的理解,请各位大大帮忙指点一下,看看有什么理解错误或者不到位的地方。
我的理解是这样的,假如我要使用内存映射文件读写一个文件:
(1)使用CreateFile打开文件,得到文件句柄hFile
( 2 )使用CreateFileMapping创建一个hFile的映射文件句柄,这一步相当于复制一个hFile,但是并没有实质的内容,类似于指针的性质,得到映射文件对象句柄hFileMap
(3)使用MapViewOfFile在使用映射文件的进程的地址空间里面,为hFileMap分配地址空间,在真正进行数据读写的时候,就为hFileMap分配物理内存,这步得到一个指向映射文件所在内存的指针。
(4)使用完毕,UnmapViewOfFile,CloseHandle等等善后。
形象点比喻的话,就是我把钱(数据)存在银行(磁盘)里,要出去旅游,可能会用到钱,但是我的背包(物理内存)背不了那么多钱,于是我就只能带上一张银行卡(映射文件对象hFileMap),到了我要去的地方,要用钱的时候就到附近银行(虚拟内存)去取,银行就会为我调动资金(为映射文件分配内存)。
使用内存映射文件来共享数据的话,就相当于是一张银行卡放在那里,想要用的人自己去拿去取钱这样。
我是新人,对于很多概念不是很清楚,我想再问问,读写磁盘文件,为什么不直接对磁盘进行操作呢?还要把文件映射出来,不是多此一举?
另外就是上面的我对映射文件的理解,大神们有空的时候帮忙看看吧谢谢啦!