免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: 印随
打印 上一主题 下一主题

[C] mmap内存占用问题 [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
11 [报告]
发表于 2008-04-03 11:53 |显示全部楼层
晕~
起第四个的时候,EBUS 了。
  1. flw@debian:~/cis$ ../study/tmmap
  2. 总线错误 (core dumped)
  3. flw@debian:~/cis$
复制代码



哦,我知道了,总线错误是因为我的硬盘满了,文件操作失败了,并不是内存不够了。
我换个大硬盘的机器试试。
我感觉应该是十个八个一两百个问题都不大。

[ 本帖最后由 flw 于 2008-4-3 11:58 编辑 ]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
12 [报告]
发表于 2008-04-03 12:10 |显示全部楼层
草草的做个总结吧,然后去吃饭:

1,malloc 和 mmap 极其相似,它们俩都不消耗物理内存,但是如果物理内存有富余的话,就会给它们用。
2,当物理内存紧张时(比如别的程序又需要申请一大笔内存),就会换页,将暂时用不到的页面交换到磁盘上去。
malloc 是交换到 swap(包括 swap 分区和 swap file),但是 mmap 则是交换到文件里去。

推论:
1,swap 分区总是有限的,因此所有进程总共可以 malloc 的内存总是有限的,
   但是 mmap 则只要磁盘空间足够,总是能成功,且不影响其它应用程序的正常运行(【重要】也就是不会随机 drop 倒霉进程)。
2,考虑只读的情况,mmap 不会比 malloc 更慢,因为它们俩的策略是相同的,都是优先使用物理内存,缺页时从磁盘上 load 页面。

[ 本帖最后由 flw 于 2008-4-3 12:22 编辑 ]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
13 [报告]
发表于 2008-04-03 13:16 |显示全部楼层
原帖由 印随 于 2008-4-3 13:13 发表
munmap是 释放映射空间

为什么我循环调用mmap,munmap   剩余内存还是一直在减小?

啥叫“剩余内存”?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
14 [报告]
发表于 2008-04-03 13:24 |显示全部楼层
许多年以前,这个论坛流行一句很自负很自豪很牛逼的话:
内存就是让用的……

[ 本帖最后由 flw 于 2008-4-3 13:26 编辑 ]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
15 [报告]
发表于 2008-04-03 15:07 |显示全部楼层
原帖由 思一克 于 2008-4-3 15:06 发表
所以,尽量不要用mmap映射大文件. 尤其是不要用在常驻内存的程序中.

分段映射呢?
比如每次只映射一小部分。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
16 [报告]
发表于 2008-04-03 15:25 |显示全部楼层
原帖由 思一克 于 2008-4-3 15:16 发表
如果读写的仅仅是文件中的一小块地方, 不分段也可以, 对于没有读写的地方,mmap后并没有真正使用物理内存

但是占地址空间呀。
因此不分段的话,程序就只能处理不超过 2G 的文件,比如 19 个 100M,或者 5 个 390M。
我的 FTP 上传程序目前就有这个限制。

另外我觉得我使用 mmap 一方面是可能会快一点,另一方面主要还是觉得编码会简单些(我是多线程共享句柄)。
当然了,如果分段的话,编码简单这个优势就不是很明显了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP