随笔分类 - STL 源码分析
摘要:1. 简介 STL的容器分为序列式容器和关联式容器。vector作为序列式容器的一种,其内存模型与操作方式与数组类似,都是以一段连续的内存空间存储数据单元,区别在于数组的内存空间大小固定,不可变动,而vector可实现动态的内存迁移。当vector存储满后,会自动重新申请更大的内存空间作为新的存储容
阅读全文
摘要:1. 简介 作为STL六大组件之一的迭代器(iterator),它提供一种方法,使之能够依次访问容器内所含的各个元素,而又不需暴露容器的内部表述方式。它扮演着容器与算法之间的胶合剂,也是所谓的“泛型指针”。从实现的角度看,迭代器是一种将operator*,operator->,operator++,
阅读全文
摘要:1. 简介 stl 在<bits/stl_uninitialized.h>文件中提供了一系列的全局内存处理函数,用于容器的初始化工作。此篇章主要分析该文件提供的部分函数。 2. __uninitialized_default_n_a // 调用空间分配器_Allocator提供的construct函
阅读全文
摘要:1. 摘要 bitmap_allocator是STL空间分配器的其中一种,它采用内存池策略,最多存储64条空闲链表(freelist,实际是一块空间连续的内存区,后面也称为超级块),每条空闲链表存储的内存块(block)个数呈指数递增,内存块大小一致,内存池的阈值总是维持在64,任何时刻内存池的链表
阅读全文
摘要:1. 摘要 pool_allocator是一种基于单锁内存池的空间分配器,其内部采用内存池思想,通过构建16个空闲内存块队列,来进行内存的申请和回收处理。每个空闲队列管理的内存块大小固定,且均为8的倍数,范围从8到128字节,按8的倍数递增。该空间分配器最小分配单位为8字节,低于128字节(含128
阅读全文
摘要:1. 简介 mt allocator 是一种以2的幂次方字节大小为分配单位的空间配置器,支持多线程和单线程。该配置器灵活可调,性能高。 分配器有三个通用组件:一个描述内存池特性的数据,一个包含该池的策略类,该池将实例化类型链接到公共或单个池,以及一个从策略类继承的类,该类是实际的分配器。 描述内存池
阅读全文
摘要:1. 摘要 STL的空间分配器(allocator)定义于命名空间std内,主要为STL容器提供内存的分配和释放、对象的构造和析构的统一管理。空间分配器的实现细节,对于容器来说完全透明,容器不需关注内存分配和回收的策略细节如何。 STL allocator需实现如下4个标准接口 pointer al
阅读全文