STL空间配置器之 allocate

6 篇文章 1 订阅

我们知道new和delete管理对象时其实都内含两阶段操作,一个是对内存空间的操作,使用operator new和operator delete来申请和释放内存空间,一个是调用构造函数和析构函数来构造和销毁对象。类似的STL也需要两阶段的操作,不过为了精密分工,STL把两个阶段拆开了。

对于内存的管理,STL会使用空间配置器(allocator)的**allocate()函数来分配足够大、原始的、未命名的内存;调用deallocate()**函数来回收内存,

其中比较复杂的是allocate()函数,为了解决内存分配中会出现的内存碎片问题小块内存频繁申请和释放带来的性能问题,SGI STL设计了双层级配置器

第一级配置器

第一级配置器内部直接使用malloc来进行申请相应大小的内存空间,当需要配置的区块大小超过128字节时,认为“足够大”,使用第一级配置器。(这里使用了别人的图,找不到原地址了,侵删)
在这里插入图片描述

第二级配置器

当需要配置的区块的大小小于128字节时,认为“过小”,为了避免刚刚提到的内存碎片问题和小块内存频繁申请和释放带来性能问题,就会使用采用了内存池 + 自由链表 技术的第二级配置器进行内存分配。

整体流程图

如下:
allocate流程图
_S_refill函数内部流程图

(未完待续…)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值