stl源码学习之内存配置器
sgi stl 定义了两种内存配置器:符合stl规范的std::allocator,以及具有高效率的std:alloc.
1.std::allocator<T>
allocator是对c++标准程序库中::operator new 和 delete的简单封装,没有考虑到性能问题。
2.std:alloc(注意没有模板参数)
alloc是具备次配置能力的内存配置器,这里的次配置能力我的理解是alloc根据申请内存块的大小决定请用
第一级配置器还是第二级配置器已达到最大化效率,减少内存碎片的效果。当配置内存区块大于128字节时,视为做够大的内存
则调用地一级配置器,否则为了较少内存碎片则采用第二级配置器。
第一级配置器:_malloc_alloc_template
void* allocate()函数直接使用malloc;void deallocate(void* p)直接使用free
第二级配置器: _default_alloc_template
维护一个16个元素大小的自由空间链表,负责16个小型区块的次配置能力。每个元素都是指针,分别指向8、16、32、40.。。128byte区块的下一个空闲地址。
内存空间由内存池中获得。
自由链表的数据结构以及示意图:
浙公网安备 33010602011771号