免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1840 | 回复: 9
打印 上一主题 下一主题

[内存管理] linux內存分配 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-09-29 09:44 |只看该作者 |倒序浏览
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
2 [报告]
发表于 2013-09-29 13:06 |只看该作者
回复 1# yshihyu
申请1M失败,不代表申请1024个1k会失败。所有你的第一个代码简单的判断返回值后就直接退出是错误的,尤其是你的分配单元1M,有些大啊。。。

   

论坛徽章:
0
3 [报告]
发表于 2013-09-29 19:02 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
4 [报告]
发表于 2013-09-29 20:56 来自手机 |只看该作者
目测有可能能是请求分页所致

论坛徽章:
0
5 [报告]
发表于 2013-09-30 00:20 |只看该作者
1. megs_obtained用于记录成功分配次数,下面的条件决定了65535(即:PHY_MEM_MEGS * 2)
while (megs_obtained < (PHY_MEM_MEGS * 2))

2. 第二段代码运行时间长,所以top能看到内存变化,第1段代码瞬间完成,可能你的top还没开始执行就已经退出了。

论坛徽章:
0
6 [报告]
发表于 2013-09-30 16:13 |只看该作者
第一段程序,虽然每次分配1M内存成功了,但是并不代表系统就立刻分配1M的物理内存给你,尤其是你后面对这段内存操作仅限于前面几个字节,所以物理内存减少的没有想象中的快。但是也会有占用内存一定得内存。从我的机器上跑,大约总共占用了不到400M内存。
如果你再每一个malloc后,对其进行memset操作(就像第2个程序那样),其结果就是在几乎将内存和swap分配光之后,进程被kill掉。
我机器上测得差不多分配1.8G内存后就被杀了。
PS:测试机内存1G,swap空间1G

论坛徽章:
0
7 [报告]
发表于 2013-10-10 10:22 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
8 [报告]
发表于 2013-10-10 13:43 |只看该作者
当你往内存里写数据的时候,这个内存才真正属于你的。

论坛徽章:
1
综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00
9 [报告]
发表于 2013-10-13 07:10 |只看该作者
本帖最后由 fly3ds 于 2013-10-13 07:26 编辑
yshihyu 发表于 2013-10-10 10:22
为什么 memset 操作可以立刻分配物理内存?


这个就是Copy on Write吧,真正往里写数据时才分配内存。不过第一个程序确实是往里写数据了......

论坛徽章:
1
综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00
10 [报告]
发表于 2013-10-13 07:19 |只看该作者
yshihyu 发表于 2013-09-29 09:44
我系统linux 64bit ,机子内存有32G ,所以修改上面代码PHY_MEM_MEGS (1024 * 32)

可是我跑到Hello World ...


你这个人太懒,计算器都不愿按几下,算一下循环了多少次,1024 * 32 * 2 = 65536.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP