跳至主要內容

reallocate

张威小于 1 分钟c/c++SGI STL源码

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);
}