您的位置:首页 > 其它

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区块的下一个空闲地址。

内存空间由内存池中获得。

自由链表的数据结构以及示意图:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: