猿问

C++:这种情况使用“内存映射文件”合适吗?

需求
从一个大小为1G左右的txt文档中查找某个字符串
注:只读取
平台
Windows
小菜的困惑
是不是直接将1G大小的文档直接映射到内存中,如果是这样的话,是不是意味着,将使用1G左右的内存?
UYOU
浏览 365回答 2
2回答

哈士奇WWW

如果是Linux的mmap()实现,只读条件下肯定是怎么都不会笨到真的分配这么多内存的。唯有读/写条件下,并且还要用MAP_PRIVATE方式,才会以copy-on-write机制在首次修改时分配内存。这段代码可以绕过分区表等,直接底层读取硬盘数据。你可以看一下在运行之前和运行当中(就是最后卡在pause的时候),free命令看内存余量是没变化的。#include#include#include#include#include#includeintmain(void){intfd;unsignedchar*phdd;inti;fd=open("/dev/sdb",O_RDONLY);phdd=mmap(NULL,1024UL*1024*1024,PROT_READ,MAP_SHARED,fd,0);for(i=0;i

繁花不似锦

是的,是会使用1G的虚拟内存(即进程的已使用内存地址空间会增加),它会映射到磁盘上的文件上,并不消耗多少物理内存。Unix-likeonly.
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答