免费注册 查看新帖 |

Chinaunix

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

[内存管理] smaps 内存分布 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2015-01-22 19:37 来自手机 |只看该作者
差一个代沟,,我刚才写了段代码,新开一个线程的情况下没看到有申请64m的内存,,,这样看来是自己的池用完了,申请了个新的啊,,

论坛徽章:
0
12 [报告]
发表于 2015-01-25 23:34 |只看该作者
回复 10# gaojl0728
大师,有一事不明。
一个进程起来后到底有几个arena可用啊?
我查找资料,翻看glibc源码,得到信息如下:
1.一般一个进程几来后有几个arena是只cpu有关,一般一个核一个arena
2.当malloc的时候,会先去取得一个arena,如果所有的arena不可用,即字满或者正被其它线程lock,则新开一个arena。新开的arena是64M。

基于以上两点,我做了一个试验。
OS: ubuntu 64bit
1. 新开一个线程,在线程中去malloc,这时候,top显示内存会上涨64M,因为新线程会新开一个arena
2.我以每次128K继续申请内存,一直申请,但总是看不到每二次64M上涨,也就是说哪怕我申请的内存已经多于64M,也没有去申请第三个arena,到128M也是如此。这点我怎么也想不明白,所以跟你请教一下了,,

   

论坛徽章:
3
射手座
日期:2014-08-18 12:15:53戌狗
日期:2014-08-22 09:53:36寅虎
日期:2014-08-22 14:15:29
13 [报告]
发表于 2015-01-27 10:01 |只看该作者
回复 12# hhuccpj


    arena每个线程一个, 不过有个上限, 这个上限跟CPU数有一定的线性关系,超过上限才会服用之前的arena,

还有一点是线程退出的时候Arena会被放到一个缓存里, 所以新线程不一定每次都会创建arena, 有可能会服用缓存里的Arena。

超过64M没分配新的heap是因为没触发条件, glibc创建新heap用的是grow_heap, 你可以自己看看触发的条件, 这代码就有点复杂了。

论坛徽章:
0
14 [报告]
发表于 2015-01-27 10:19 |只看该作者
回复 13# gaojl0728
多谢指点,我再翻下代码

另外我做的实验也发现,不两只的glibc版本,新开线程有不同的表现
公司的suse 11新加线程只会新加2M
家里的ubuntu 14新加线程会加64M
看来不同版本还是有比较大的区别

   

论坛徽章:
3
射手座
日期:2014-08-18 12:15:53戌狗
日期:2014-08-22 09:53:36寅虎
日期:2014-08-22 14:15:29
15 [报告]
发表于 2015-01-27 10:22 |只看该作者
回复 14# hhuccpj


    32位和64位heap大小不一样, 32位的heap记得好像就是1~2M的样子

论坛徽章:
0
16 [报告]
发表于 2015-01-27 15:18 |只看该作者
回复 15# gaojl0728

都是64位的,也有差别
家里是32位CPU,装的64位系统,新开线程内存加了64M
公司是64位CPU,64位系统,新开线程内存加了2M


这两段代码我已经晕了
      if ((long) (MINSIZE + nb - old_size) > 0
          && grow_heap (old_heap, MINSIZE + nb - old_size) == 0)
        {
          av->system_mem += old_heap->size - old_heap_size;
          arena_mem += old_heap->size - old_heap_size;
          set_head (old_top, (((char *) old_heap + old_heap->size) - (char *) old_top)
                    | PREV_INUSE);
        }
      else if ((heap = new_heap (nb + (MINSIZE + sizeof (*heap)), mp_.top_pad)))


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP