免费注册 查看新帖 |

Chinaunix

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

[函数] glibc 2.12.1中malloc源码问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-06-30 16:33 来自手机 |只看该作者 |倒序浏览
malloc源码中,是何时对main arena进行初始化了??对这个初始化流程不太熟悉,有明白的能帮帮忙吗?谢谢!

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
2 [报告]
发表于 2016-06-30 21:07 |只看该作者
本帖最后由 MMMIX 于 2016-06-30 21:08 编辑

回复 1# contestjia


    2.12? 好古老的版本。

main_arena 本身是个无初值静态变量,保存在 .bss 段,在程序加载的时候就全初始化好了。再后来对其成员的写入,最开始的估计就是 malloc/arena.c 中的 ptmalloc_init() 了:https://sourceware.org/git/?p=gl ... 6bee2c60d0ca43#l510

510   mutex_init(&main_arena.mutex);
511   main_arena.next = &main_arena;

论坛徽章:
89
水瓶座
日期:2014-04-01 08:53:31天蝎座
日期:2014-04-01 08:53:53天秤座
日期:2014-04-01 08:54:02射手座
日期:2014-04-01 08:54:15子鼠
日期:2014-04-01 08:55:35辰龙
日期:2014-04-01 08:56:36未羊
日期:2014-04-01 08:56:27戌狗
日期:2014-04-01 08:56:13亥猪
日期:2014-04-01 08:56:02亥猪
日期:2014-04-08 08:38:58程序设计版块每日发帖之星
日期:2016-01-05 06:20:00程序设计版块每日发帖之星
日期:2016-01-07 06:20:00
3 [报告]
发表于 2016-07-01 09:00 |只看该作者
MMMIX 发表于 2016-06-30 21:07
回复 1# contestjia


大哥,你太牛逼了,让我来膜拜一下。

论坛徽章:
0
4 [报告]
发表于 2016-07-01 09:53 来自手机 |只看该作者
这只是把它的互斥群锁初始化,以及自己链成环,可它里面的bins以及fastbinsY都是指向NULL的,我看thread arena初始化的时候,都会把这些bin指向一个地址,来标识当前bin都是空

论坛徽章:
0
5 [报告]
发表于 2016-07-02 12:18 来自手机 |只看该作者
这只是把它的互斥群锁初始化,以及自己链成环,可它里面的bins以及fastbinsY都是指向NULL的,我看thread arena初始化的时候,都会把这些bin指向一个地址,来标识当前bin都是空

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
6 [报告]
发表于 2016-07-02 21:51 |只看该作者
回复 4# contestjia


    这就可以用啦。对其他成员的操作,都是散落在不同的地方。不过,目前最新的代码,倒是在定义时给了 main_arena 一个完整的初值。

论坛徽章:
0
7 [报告]
发表于 2016-07-03 00:02 |只看该作者
本帖最后由 contestjia 于 2016-07-03 00:03 编辑

回复 6# MMMIX
你好,请问main_arena第一次调用sbrk进行堆扩展是什么时候了?

还有我查看进程的/proc/pid/maps,发现通常是132K的空间是rw_p权限,但non_main_arena的堆在new_heap的时候设置的空间应该是32K啊

这是申请堆时的size调整:
#define HEAP_MIN_SIZE (32*1024)


这是设置size的大小为read和write:





   

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
8 [报告]
发表于 2016-07-03 10:42 |只看该作者
contestjia 发表于 2016-07-03 00:02
回复 6# MMMIX
你好,请问main_arena第一次调用sbrk进行堆扩展是什么时候了?

不知道。你跟踪下呗。

还有我查看进程的/proc/pid/maps,发现通常是132K的空间是rw_p权限,但non_main_arena的堆在new_heap的时候设置的空间应该是32K啊


这你不能光考虑 new_heap() 呀,grow_heap() 什么的也要考虑进去。

论坛徽章:
0
9 [报告]
发表于 2016-07-03 13:22 来自手机 |只看该作者
谢谢,132K的原因我知道,另外那个我再跟踪下,谢谢了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP