__default_alloc_template拥有配置器的标准接口函数allocate()。
此函数首先判断区块大小:
如果大于128bytes,就调用第一级配置器;
如果小于128bytes,就检查对应的free lists。
1.如果free list 之内有可用的区块,就直接拿来用;
2.如果没有,就将区块大小上调至8倍数边界,然后调用refill()准备为free list重新填充空间。
static void * allocate(size_t n)
{
obj * volatile * my_free_list;
obj * result ;
//大于128bytes,使用第一级空间配置器
if(n > (size_t)__MAX_BYTES) //__MAX_BYTES ==128
return (malloc_alloc::allocate(n));
//小于128 ,则在16个free lists中选择适当的一个
my_free_list = free_list +FREELIST_INDEX(n);
result = *my_free_list ;
if(result ==0)//不存在
{
void * r = refill(round_up(n)) ;//填充free list
return r ;//返回给用户
}
//调整free list
*my_free_list = result->free_list_link ;
return result ;
}