免费注册 查看新帖 |

Chinaunix

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

malloc奇怪的现象 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-10-17 09:41 |只看该作者

回复 #6 sunceenjoy 的帖子

我记得好像是即使分配了内存,如果没有使用的话,是不会占用物理内存的。
分配内存只是分配的虚拟内存,只有对分配的内存进行写数据的时候,才会写时拷贝,真正分配物理内存。
程序二中只是分配的内存没有使用,为什么用free -m查看内存消耗很快?

论坛徽章:
0
12 [报告]
发表于 2009-10-17 09:59 |只看该作者
40延时可以malloc很多次了

论坛徽章:
0
13 [报告]
发表于 2009-10-17 10:13 |只看该作者
原帖由 yjcq 于 2009-10-17 09:41 发表
我记得好像是即使分配了内存,如果没有使用的话,是不会占用物理内存的。
分配内存只是分配的虚拟内存,只有对分配的内存进行写数据的时候,才会写时拷贝,真正分配物理内存。
程序二中只是分配的内存没有使用 ...


对于1K这种小内存,malloc是从系统获得虚拟内存,再自己负责分配,这就必须维护一些数据结构,从而引起物理内存的使用。你的程序是在64位系统上执行的,这些数据结构足以耗尽所有的物理内存!

如果将每次分配的内存从1K改成10M,就不会占用物理内存。

论坛徽章:
0
14 [报告]
发表于 2009-10-17 10:25 |只看该作者

回复 #12 dragchan 的帖子

试了一下:
1k:耗尽所有的物理内存
1M:耗尽所有的物理内存
10M:报错error: Cannot allocate memory

跟64位系统有关系吗?如果时32的呢

论坛徽章:
0
15 [报告]
发表于 2009-10-17 10:40 |只看该作者

回复 #13 yjcq 的帖子

32位系统下,每个进程的虚拟地址空间约为3G,如果机子的物理内存充足的话,是不会耗尽的。(具体的临界值取决于malloc的实现)

64位系统下,每个进程的虚拟地址空间非常大,几个G的物理内存肯定要被耗尽。

论坛徽章:
0
16 [报告]
发表于 2009-10-17 10:54 |只看该作者

回复 #14 dragchan 的帖子

你的意思是对于32位的系统,malloc持续分配1K内存,由于每个进程的虚拟地址空间约为3G,malloc只能分配3G左右的空间,如果机子的物理内存充足,能够扛住内部数据结构消耗的内存?

对于64位,malloc能分配很大的空间,即使机子的物理内存充足,也扛不住内部数据结构消耗的内存?

论坛徽章:
0
17 [报告]
发表于 2009-10-17 11:04 |只看该作者

回复 #15 yjcq 的帖子

yes.

对于小内存的分配,进程虚拟地址空间的大小限制了malloc内部数据结构使用的物理内存的最大值。
对于10M这样的大内存分配,malloc直接从虚拟地址空间分配,不占用任何物理内存。当虚拟地址空间耗尽时,报错error: Cannot allocate memory

论坛徽章:
0
18 [报告]
发表于 2009-10-17 11:12 |只看该作者

回复 #16 dragchan 的帖子

对于10M这样的大内存分配,malloc直接从虚拟地址空间分配,不占用任何物理内存。当虚拟地址空间耗尽时,报错error: Cannot allocate memory

还有个疑问哈,64位系统下,每个进程的虚拟地址空间非常大,malloc应该不能分配完的吧?

论坛徽章:
0
19 [报告]
发表于 2009-10-17 11:20 |只看该作者

回复 #17 yjcq 的帖子

64位系统下,每个进程的虚拟地址空间是非常大,但不是无限大,一直持续不断的分配,最终也是要耗尽的。

可以在测试程序中加入计数器,看看能够分配的最大虚拟地址空间是多少

论坛徽章:
0
20 [报告]
发表于 2009-10-17 11:47 |只看该作者

回复 #18 dragchan 的帖子

10M:分配了52311次报error: Cannot allocate memory。
1k:能分配90万次左右,内存耗尽

10M:malloc能分配500G左右虚拟空间
1K:malloc能分配900G左右虚拟空间
malloc能分配的虚拟空间为什么不一样呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP