在上一篇里面说到,vs 的标准分配器 std::allocator
并没有做内存管理。gnu的历史版本 2.9 中的标准分配器 std::allocator 也没有做内存管理,但是它提供的 extended allocator 中,std::alloc 就是一个做了内存管理的版本。在 gnu 新版本中,__gnu_cxx::__pool_alloc<_Ty> 就是 G2.9 的 std::alloc 的化身。
下面先分析以下 std::alloc 的运行模式,再下一篇分析具体代码。
不过先需要前三篇的基础:
数据结构
- 一个指针数组
free_list[16]
,分别负责16条不同大小的 block,以 8 bytes 为间隔。比如 #0