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行)
次はここを見て行きましょう。