ビンの初期化は malloc_init_state() 関数で行われます。
以下がソースとなりますね。
malloc.c(https://github.com/MacKomatsu/glibc/blob/release/2.27/master/malloc/malloc.c).
1800 /* 1801 Initialize a malloc_state struct. 1802 1803 This is called from ptmalloc_init () or from _int_new_arena () 1804 when creating a new arena. 1805 */ 1806 1807 static void 1808 malloc_init_state (mstate av) 1809 { 1810 int i; 1811 mbinptr bin; 1812 1813 /* Establish circular links for normal bins */ 1814 for (i = 1; i < NBINS; ++i) 1815 { 1816 bin = bin_at (av, i); 1817 bin->fd = bin->bk = bin; 1818 } 1819 1820 #if MORECORE_CONTIGUOUS 1821 if (av != &main_arena) 1822 #endif 1823 set_noncontiguous (av); 1824 if (av == &main_arena) 1825 set_max_fast (DEFAULT_MXFAST); 1826 atomic_store_relaxed (&av->have_fastchunks, false); 1827 1828 av->top = initial_top (av); 1829 }
コメントに書いてますが ptmalloc_init() または _int_new_arena() をコールする際に使用されるらしいです。
bin_at() 関数からビンを指すポンターを取得して、そこから fd と bk ポインターを初期化しています。
Copyright 2018-2019, by Masaki Komatsu