STL之空间配置器


一、四种函数

1、std::allocator

内存配置

2、std::deallocate

内存释放

3、std::construct

对象构造

4、std::destroy

对象析构

二、两级配置器

原因:为了提升内存管理的效率,较少申请内存造成的内存碎片问题。

1、第一级空间配置器

当分配的空间大小超过128B时,会使用第一级空间配置器,使用malloc()、realloc()、free()函数进行内存空间的分配和释放

2、第二级空间配置器

当分配的空间大小小于128B时,使用第二季空间配置器,使用内存池技术,通过链表来管理内存

在分配内存的时候分为三种情况,核心函数 ChunkAlloc

函数开始,先计算内存池的剩余空间以及分配多个节点需要总共内存空间

(1)当剩余的内存大于要分配的内存的时,直接分配,之后返回

(2)当剩余的内存不能满足要配方的多个节点的内存需要,但是满足至少一个节点以上的内存需求,能满足几个节点的内存就分配几个节点的内存,之后返回

(3)当剩余的内存连一个节点的内存需求都无法满足的时候,将剩余的内存挂在自由连表上,然后向系统申请,成功则返回,申请失败则在自由链表中寻找,如行不通,则调用一级空间适配器