malloc読んでみた1 initからpagesizeまで

freebsdのmalloc.cを読んで見ましょう。

場所は

/usr/src/lib/libc/stdlibの中にあります。

ヘッダーはusr/src/sys/sys/malloc.hですね。

では見てみましょう!

スタート地点はもちろん

void * malloc(size_t size) (5281行)

ですよね。

この中でまず目につくのは5285行目のmalloc_initです

malloc_init(4758行)はmalloc_init_hardを呼んでいるだけです。

static inline bool
malloc_init(void)
{

    if (malloc_initialized == false)
        return (malloc_init_hard());

    return (false);
}

 

malloc_init_hard(4768行) ではまず一回だけ呼ばれることをinit_lock(4776行)で確保しています。

malloc_mutex_lock(&init_lock);
    if (malloc_initialized) {
        /*
         * Another thread initialized the allocator before this one
         * acquired init_lock.(4768行)
         */
        malloc_mutex_unlock(&init_lock);
        return (false);
    }

そのあとにcpuの数を数えたりoptionを設定したりします。そこは省略。

重要そうなのはpagesizesという配列を設定しているところです。(4800行)

次はここを見て行きましょう。