为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

犯罪嫌疑人X 2019-04-09 20:23:47
需求从一个大小为1G左右的txt文档中查找某个字符串注:只读取平台Windows小菜的困惑是不是直接将1G大小的文档直接映射到内存中,如果是这样的话,是不是意味着,将使用1G左右的内存?
查看完整描述

2 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

如果是Linux的mmap()实现,只读条件下肯定是怎么都不会笨到真的分配这么多内存的。唯有读/写条件下,并且还要用MAP_PRIVATE方式,才会以copy-on-write机制在首次修改时分配内存。
这段代码可以绕过分区表等,直接底层读取硬盘数据。你可以看一下在运行之前和运行当中(就是最后卡在pause的时候),free命令看内存余量是没变化的。
#include
#include
#include
#include
#include
#include
intmain(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<1024;i++){
putchar(*(phdd+i));
}
system("sleep60");
return0;
}
                            
查看完整回答
反对 回复 2019-04-09
?
侃侃无极

TA贡献2051条经验 获得超10个赞

是的,是会使用1G的虚拟内存(即进程的已使用内存地址空间会增加),它会映射到磁盘上的文件上,并不消耗多少物理内存。
Unix-likeonly.
                            
查看完整回答
反对 回复 2019-04-09
  • 2 回答
  • 0 关注
  • 369 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信