接近一年未更新博文,忙着适应工作环境,当然自己也变懒了不少。感觉还是得多抽时间充实自己,本文开始分析stl源码。
本系列分析的stl 版本为 sgi v3.3。
首先分析内存分配器,因为容器需要依赖内存分配器来实现。如最常用容器的定义:
1 | // alloc 是 SGI STL 的空间配置器 |
这里的 __STL_DEFAULT_ALLOCATOR
定义为:
1 |
allocator
内部实现也为 alloc
, 所以本文分析的对象为 alloc
。
关于 alloc
的实现,文件目录为 allocator/stl_alloc.h
关于alloc
的定义有两种:(通过宏来开关是哪一种):
- 第一级配置器:
1 | typedef __malloc_alloc_template<0> malloc_alloc; |
此时实际类为 __malloc_alloc_template
- 第二级配置器:
1 | typedef __default_alloc_template<__NODE_ALLOCATOR_THREADS, 0> alloc; // 令 alloc 为第二级配置器 |
此时实际类为 : __default_alloc_template