STL空间配置器之 allocate

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

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

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

第一级配置器

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

第二级配置器

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

整体流程图

如下:
STL空间配置器之 allocate_第2张图片
STL空间配置器之 allocate_第3张图片

(未完待续…)

你可能感兴趣的:(c++,笔记,stl,c++)