reallocate
小于 1 分钟
reallocate
作用: 对内存池中的__chuck块进行扩容或缩容,一般用的比较少
template <bool threads, int inst>
void* __default_alloc_template<threads, inst>::reallocate(void* __p,
size_t __old_sz,
size_t __new_sz)
{
// 参数:chunk块的其实地址、调整前chunk块的大小、调整后chunk块的大小
void* __result;
size_t __copy_sz;
if (__old_sz > (size_t) _MAX_BYTES && __new_sz > (size_t) _MAX_BYTES) {
// __old_sz和__new_sz都大于128字节,并不是从内存池分配的内存,直接调用库函数realloc
return(realloc(__p, __new_sz));
}
// __old_sz和__new_sz处于同一数量区间,不用扩容或缩容
if (_S_round_up(__old_sz) == _S_round_up(__new_sz)) return(__p);
// __result指向重新分配的空间
__result = allocate(__new_sz);
// __copy_sz 保存最小值
__copy_sz = __new_sz > __old_sz? __old_sz : __new_sz;
// 从__p拷贝到__result,扩容拷贝__old_sz字节,缩容拷贝__new_sz
memcpy(__result, __p, __copy_sz);
// 归还原来的chunk块到内存池
deallocate(__p, __old_sz);
return(__result);
}