免费注册 查看新帖 |

Chinaunix

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

调用malloc函数什么时候会被killed? [复制链接]

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
11 [报告]
发表于 2011-12-19 19:02 |只看该作者

论坛徽章:
14
水瓶座
日期:2014-06-10 09:51:0215-16赛季CBA联赛之江苏
日期:2017-11-27 11:42:3515-16赛季CBA联赛之八一
日期:2017-04-12 14:26:2815-16赛季CBA联赛之吉林
日期:2016-08-20 10:43:1215-16赛季CBA联赛之广夏
日期:2016-06-23 09:53:58程序设计版块每日发帖之星
日期:2016-02-11 06:20:00程序设计版块每日发帖之星
日期:2016-02-09 06:20:0015-16赛季CBA联赛之上海
日期:2015-12-25 16:40:3515-16赛季CBA联赛之广夏
日期:2015-12-22 09:39:36程序设计版块每日发帖之星
日期:2015-08-24 06:20:002015亚冠之德黑兰石油
日期:2015-08-07 09:57:302015年辞旧岁徽章
日期:2015-03-03 16:54:15
12 [报告]
发表于 2011-12-19 19:03 |只看该作者
juruqiang 发表于 2011-12-19 18:46
为什么memset会使进程被kill掉?

就算虚拟内存分配成功, 在实际写内存单元前, 也不会分配物理内存——前面大大有讲嘛

另外就是杀进程——可以看看内核的alloc_pages中的out_of_memory函数就大概知道了,应该是如果连alloc_pages这个函数都进入不了,根本就不会走入OOM的流程


论坛徽章:
0
13 [报告]
发表于 2011-12-19 19:24 |只看该作者
zylthinking 发表于 2011-12-19 19:02
http://bbs.chinaunix.net/thread-3633694-1-1.html

soga


还有一个问题:那为什么malloc 10M和100M的时候,不都memset了吗,
为什么100M的没有在memset时,被killed???

论坛徽章:
0
14 [报告]
发表于 2011-12-19 19:25 |只看该作者
lxyscls 发表于 2011-12-19 19:03
就算虚拟内存分配成功, 在实际写内存单元前, 也不会分配物理内存——前面大大有讲嘛

另外就是杀进程 ...

soga


还有一个问题:那为什么malloc 10M和100M的时候,不都memset了吗,
为什么100M的没有在memset时,被killed???

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
15 [报告]
发表于 2011-12-19 19:25 |只看该作者
juruqiang 发表于 2011-12-19 19:24
soga

你这问题问得, 那前几次 malloc(10M) 然后memset 还没有 kill 呢

论坛徽章:
0
16 [报告]
发表于 2011-12-19 19:30 |只看该作者
zylthinking 发表于 2011-12-19 19:25
你这问题问得, 那前几次 malloc(10M) 然后memset 还没有 kill 呢

malloc(10M)  分配到1240MB后,被killed
malloc(100M)  分配到1200MB后,can not allocate memory..

就差这40MB的原因。。。

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
17 [报告]
发表于 2011-12-19 19:32 |只看该作者
你没有完全看懂之前的帖子, 仔细看看然后仔细想想吧

论坛徽章:
0
18 [报告]
发表于 2011-12-19 20:06 |只看该作者
zylthinking 发表于 2011-12-19 19:32
你没有完全看懂之前的帖子, 仔细看看然后仔细想想吧

小弟愚钝

是不是因为1200MB不足以引发OOM Killer ,而1240MB可以?

谢谢

论坛徽章:
14
水瓶座
日期:2014-06-10 09:51:0215-16赛季CBA联赛之江苏
日期:2017-11-27 11:42:3515-16赛季CBA联赛之八一
日期:2017-04-12 14:26:2815-16赛季CBA联赛之吉林
日期:2016-08-20 10:43:1215-16赛季CBA联赛之广夏
日期:2016-06-23 09:53:58程序设计版块每日发帖之星
日期:2016-02-11 06:20:00程序设计版块每日发帖之星
日期:2016-02-09 06:20:0015-16赛季CBA联赛之上海
日期:2015-12-25 16:40:3515-16赛季CBA联赛之广夏
日期:2015-12-22 09:39:36程序设计版块每日发帖之星
日期:2015-08-24 06:20:002015亚冠之德黑兰石油
日期:2015-08-07 09:57:302015年辞旧岁徽章
日期:2015-03-03 16:54:15
19 [报告]
发表于 2011-12-20 09:24 |只看该作者
juruqiang 发表于 2011-12-19 19:30
malloc(10M)  分配到1240MB后,被killed
malloc(100M)  分配到1200MB后,can not allocate memory..

就算虚拟内存分配成功

这个是前面大大讲了的——你malloc 100MB根本连虚拟内存都无法分配成功——malloc直接返回失败,也就是说无法进入物理内存的alloc_pages,也就根本无法进入OOM这个流程

论坛徽章:
14
水瓶座
日期:2014-06-10 09:51:0215-16赛季CBA联赛之江苏
日期:2017-11-27 11:42:3515-16赛季CBA联赛之八一
日期:2017-04-12 14:26:2815-16赛季CBA联赛之吉林
日期:2016-08-20 10:43:1215-16赛季CBA联赛之广夏
日期:2016-06-23 09:53:58程序设计版块每日发帖之星
日期:2016-02-11 06:20:00程序设计版块每日发帖之星
日期:2016-02-09 06:20:0015-16赛季CBA联赛之上海
日期:2015-12-25 16:40:3515-16赛季CBA联赛之广夏
日期:2015-12-22 09:39:36程序设计版块每日发帖之星
日期:2015-08-24 06:20:002015亚冠之德黑兰石油
日期:2015-08-07 09:57:302015年辞旧岁徽章
日期:2015-03-03 16:54:15
20 [报告]
发表于 2011-12-20 09:26 |只看该作者
juruqiang 发表于 2011-12-19 20:06
小弟愚钝

是不是因为1200MB不足以引发OOM Killer ,而1240MB可以?

不是

malloc(10MB)——虚拟内存能够分配成功,memset使其走入后续的物理内存分配流程alloc_pages,才能走入out_of_memory

malloc(100MB)——虚拟内存分配失败,malloc返回错误,memset都不会去做(没有地址)
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP