什么是空间配置器
空房间配置器,顾名思义就是用来配置,管理,分配,释放内存空间的,有了它,它为我们的各种容器提供了生存的空间。有人会问,为什么不直接用malloc来申请呢,而要用空间配置器呢?
- 提高效率:频繁的向系统申请小块内存,效率低下。
- 减少内存的碎片问题:
- 提高代码复用率和功能模块化。
- 空间不足时,有对应的应对措施。
- 隐藏实际内存分配的细节,确保分配出去的内存都会回收。
二级空间配置器
为了解决内存碎片的问题,STL提供了两层空间配置器,对于申请空间的大小不同,进而使用不同的空间配置器。
当申请的字节数>128bytes时候,使用一级空间配置器。
当<128字节的时候,使用二级空间配置器,二级空间配置器是由内存池来实现的。
下面是我总结的二级空间配置器的大概工作原理:
首先,配置一个大的内存池,并且维护与之对应的自由链表,这个自由链表有点像hash桶,一共有16个桶,每一个桶下面挂着8的整数倍的内存块,当用户想要申请内存的时候,比如申请5个字节,不是给它返回5个字节,而是返回最接近8的整数倍个内存块,即8个字节。
当用户申请内存的时候,先到对应的链表下面找内存块,