返回信息流访问一个几十g的文件,我利用了分段内存映射。循环调用mapviewoffile函数,然后unmapviewoffile,但是不调用closehandle,直到访问完了这个文件,但是映射完2G后发现映射失败了。求问怎么用内存映射来实现对大文件的访问。最好是有例子。。。
这是一条镜像帖。来源:北邮人论坛 / cpp / #72658同步于 2013/7/18
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
求助跟内存映射有关的问题
zz0083055
2013/7/18镜像同步12 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
文件流~自己开个可控大小的buffer(Windows Api参考VirtualAlloc),然后可以用ReadFile、WriteFile读写(注意会移动文件指针)~反复读写需要用SetFilePointer定位
【 在 zz0083055 的大作中提到: 】
: 访问一个几十g的文件,我利用了分段内存映射。循环调用mapviewoffile函数,然后unmapviewoffile,但是不调用closehandle,直到访问完了这个文件,但是映射完2G后发现映射失败了。求问怎么用内存映射来实现对大文件的访问。最好是有例子。。。
CreateFile -> CreateFileMapping -> MapViewOfFile
\->CloseHandle \->CloseHandle \->UnMapViewOfFile
网上例程挺多,没问题的。每个函数都看一下返回值,看看是哪里出错的。
用64位计算机和64位操作系统。之所以映射不了,是地址空间不够了。注意不是物理内存,是地址空间。32位系统每个进程的地址空间只有4gb,操作系统会保留一部分。
【 在 zz0083055 的大作中提到: 】
: 访问一个几十g的文件,我利用了分段内存映射。循环调用mapviewoffile函数,然后unmapviewoffile,但是不调用closehandle,直到访问完了这个文件,但是映射完2G后发现映射失败了。求问怎么用内存映射来实现对大文件的访问。最好是有例子。。。
【 在 tonyjansan 的大作中提到: 】
: 文件流~自己开个可控大小的buffer(Windows Api参考VirtualAlloc),然后可以用ReadFile、WriteFile读写(注意会移动文件指针)~反复读写需要用SetFilePointer定位
:
你这太土了吧。。
【 在 nuanyangyang 的大作中提到: 】
: 用64位计算机和64位操作系统。之所以映射不了,是地址空间不够了。注意不是物理内存,是地址空间。32位系统每个进程的地址空间只有4gb,操作系统会保留一部分。
这个不是靠换页实现的么?跟地址空间的关系是?