SGI STL(六)——reallocate函数解析

reallocate函数主要用于内存池的扩容和缩容

template <bool threads, int inst>
void*
__default_alloc_template<threads, inst>::reallocate(void* __p,
                                                    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)); // 使用C底层提供的内存重分配函数 
    }
    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);
}

你可能感兴趣的:(SGI,STL,allocator,C/C++,c++)