首页 > 其他 > 详细

jemalloc源码结构分析

时间:2014-04-20 06:42:07      阅读:1418      评论:0      收藏:0      [点我收藏+]

一、5种malloc方法

1)tcache_alloc_small

2)arena_malloc_small

3)tcache_alloc_large

4)arena_malloc_large

5)huge_malloc

bubuko.com,布布扣
//written in jemalloc_internal.h file
imalloct(size_t size, bool try_tcache, arena_t *arena)
{

        assert(size != 0);

        if (size <= arena_maxclass)
                return (arena_malloc(arena, size, false, try_tcache));
        else
                return (huge_malloc(size, false, huge_dss_prec_get(arena)));
}

JEMALLOC_ALWAYS_INLINE void *
imalloc(size_t size)
{

        return (imalloct(size, true, NULL));
}
//written in arena.h
JEMALLOC_ALWAYS_INLINE void *
arena_malloc(arena_t *arena, size_t size, bool zero, bool try_tcache)
{
        tcache_t *tcache;

        assert(size != 0);
        assert(size <= arena_maxclass);

        if (size <= SMALL_MAXCLASS) {
                if (try_tcache && (tcache = tcache_get(true)) != NULL)
                        return (tcache_alloc_small(tcache, size, zero));
                else {
                        return (arena_malloc_small(choose_arena(arena), size,
                            zero));
                }
        } else {
                /*
                 * Initialize tcache after checking size in order to avoid
                 * infinite recursion during tcache initialization.
                 */
                if (try_tcache && size <= tcache_maxclass && (tcache =
                    tcache_get(true)) != NULL)
                        return (tcache_alloc_large(tcache, size, zero));
                else {
                        return (arena_malloc_large(choose_arena(arena), size,
                            zero));
                }
        }
}
bubuko.com,布布扣

 

 二、malloc时选择arena的机制

 1)、先用arenas_tsd_get获得线程绑定变量arena;

2)、如果1)获得值为null,则扫描arenas数组,找到threads number为0或者最小的未卸载的arena;

3)、如果2)中扫描发现存在null插槽,则需要调用arenas_extend进行初始化null插槽;

4)、调用arenas_tsd_set设置线程绑定比变量arena。

 

//详细见jemalloc.c中函数
arena_t *choose_arena_hard(void)

 

 

 

 

jemalloc源码结构分析,布布扣,bubuko.com

jemalloc源码结构分析

原文:http://www.cnblogs.com/feika/p/3675711.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!