空间配置函数allocate
//空间配置函数的内部实现原理
//allocate()函数,首先判断区块大小,大于128bytes就调用第一级配置器,小于128bytes就检查对应的free list.
//如果free list之内有可用的区块,就直接拿来用,如果没有可用区块,就将区块大小调至8倍数边界,然后调用refill(),
//准备为freelist重新填充空间。refill() 后面再写
// n>0
static void* allocate(size_t n)
{
obj * volatile * my_free_list;
obj * result;
//大于128就调用第一级配置器
if (n > (size_t)_MAX_BYTES)
{
return (malloc_alloc::allocate(n));
}
//寻找16个free lists中适当的一个
my_free_list = free_list + FREELIST_INDEX(n);
result = *my_free_list;
if (result == 0)
{
//没有找到可用的free list,准备重新填充free list
void *r = refill(ROUND_UP(n));
return r;
}
//调整free list
*my_free_list = result->free_list_link;
return (result);
}
空间释放函数deallocate
身为一个配置器,__default_alloc_template 拥有配置器标准接口函数deallocate()。该函数首先判断区块大小,大于128bytes就调用第一级配置器,小于128bytes就找出对应的freelist,将区块回收。