内存扩容函数,涉及到一些小块内存的拷贝。源代码即注释如下:
template <bool threads, int inst>
void*
__default_alloc_template<threads, inst>::reallocate(void* __p, // chunk块大小
size_t __old_sz,
size_t __new_sz)
{
void* __result;
size_t __copy_sz;
if (__old_sz > (size_t) _MAX_BYTES && __new_sz > (size_t) _MAX_BYTES) { // 没用内存池
return(realloc(__p, __new_sz));
}
if (_S_round_up(__old_sz) == _S_round_up(__new_sz)) return(__p); // 几乎同样大小,无需重新分配
__result = allocate(__new_sz); // 从内存池中获取到新空间
__copy_sz = __new_sz > __old_sz? __old_sz : __new_sz;
memcpy(__result, __p, __copy_sz); // 从旧内存拷贝数据到新内存,数据长度是两内存的较小长度
deallocate(__p, __old_sz); // 释放旧内存
return(__result);
}