SGI_STL空间配置器源码剖析(七)reallocate函数及总结

内存扩容函数,涉及到一些小块内存的拷贝。源代码即注释如下:

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);
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值