stl源码学习之内存配置器
2013-08-28 22:52
267 查看
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区块的下一个空闲地址。
内存空间由内存池中获得。
自由链表的数据结构以及示意图:
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区块的下一个空闲地址。
内存空间由内存池中获得。
自由链表的数据结构以及示意图:
相关文章推荐
- C++STL内存配置的设计思想与关键源码分析
- STL源码剖析学习笔记之具备次配置力(sub-allocation)的SGI空间配置器
- C++STL内存配置的设计思想与关键源码分析
- C++ STL源码学习(内存配置篇)
- C++ Standard Stl -- SGI STL源码学习笔记(04) stl_deque && 初涉STL内存管理
- STL源码学习之空间配置
- C++STL内存配置的设计思想与关键源码分析
- 《STL 源码剖析》 内存配置器 笔记
- SGI STL源码之内存配置
- STL源码:空间配置器(三)内存的配置和释放、SGI的两级适配器
- STL学习_SGI空间配置器_第一级配置器源码分析
- 【源码学习】STL源码学习----lower_bound和upper_bound算法
- STL源码学习----lower_bound和upper_bound算法
- C++STL源码学习(之slist篇)
- 【spring源码学习】spring的task配置
- C++ Standard Stl -- SGI STL源码学习笔记(07) stl_vector 与 一些问题的细化 3 resize函数剖析
- DotText源码学习——从配置文件Web.config入手(一)
- C++ Standard Stl -- SGI STL源码学习笔记(08) string
- nginx 源码学习笔记(七)——内存分配相关源码分析
- c++ stl二级内存配置器的理解