关于内存映射文件的理解
内存映射文件 是不是 和虚拟内存机制 差不多
不同之处 系统程序 缺页时 虚拟内存机制 是磁盘虚拟内存区(如果虚拟内存中没有,就从物理磁盘调入虚拟内存)中调入新的页面 以继续程序的正常执行
而 内存映射 是发现缺页时候,是直接从磁盘调入内存
我理解有没有问题?
[解决办法]
http://blog.csdn.net/huangxiaoke2000/archive/2006/08/04/1017968.aspx
[解决办法]
一般都说内存映射文件和虚拟内存机制差不多。
一个很大的文件,通过CreateFileMapping建立内存映射文件无论多大的文件总是可以的,但是MapViewOfFile只能将文件有限的一部分映射到内存。这时可以理解成申请了一块内存空间,以移动窗口方式和文件的任意部分对应。对于这块内存Windows仍然用其内存管理机制管理,不用的时候还可以交换到页面文件,就是说内存映射文件和虚拟内存管理分两个层次进行。哈哈,注意了我上面说的都是我做的假设,没有资料这么说过,但是我在这假设前提下做的好像还都管用,解决问题才是主要的,管它什么机理。
对映射部分内存的操作速度不用怀疑,非常快。但是要关闭内存映射或者Flush到硬盘上的时候就惨了。楼主你的8G的文件就这么说吧,几乎是不能容忍。这个不但是内存映射文件的问题,主要还是文件太大文件传输时超过OS的性能极限。要是再大,超过几百个G内存映射没问题文件系统也受不了。
我的建议是将你的大文件拆分成一系列的瓦块文件,虽然复杂一些,但是可行。信哥的吧,没错。
[解决办法]
参考讨论贴:
http://topic.csdn.net/u/20100122/00/65762DAD-998A-49F2-A5AA-CC8B00372F23.html
希望对你的疑问有所启发。
[解决办法]