SGI 全称为 Silicon Graphics [Computer System] Inc. 硅图[计算机系统] 公司,SGI_STL是SGI实现的C++的标准模板库。
SGI STL的空间配置器包括一级和二级两种。
一级空间配置器allocator采用malloc和free来管理内存,这与C++标准库中提供的allocator是相似的。
二级空间配置器allocator则采用了基于freelist自由链表原理的内存池机制来实现内存管理。
这种设计主要是为了优化小块内存的频繁开辟和释放,避免内存碎片的产生,从而提高内存管理的效率。
空间配置器的相关定义
如下是SGI STL的stl_vector.h文件中,vector类相关的声明:

上图展示了通过宏定义,vector 区分使用C++标准提供的内存分配器(allocator)还是使用SGI自己实现的空间配置器。
template <class _Tp, class _Alloc = __STL_DEFAULT_ALLOCATOR(_Tp) >
class vector : protected _Vector_base<_Tp, _Alloc>
可以看到,容器的默认空间配置器是 __STL_DEFAULT_ALLOCATOR( _Tp),它是一个宏定义,如下:
# ifndef __STL_DEFAULT_ALLOCATOR
# ifdef __STL_USE

本文详细解析了SGI_STL中的空间配置器,包括一级采用malloc/free的内存管理和二级基于内存池的优化设计,以及stl_vector.h中的内存分配和管理函数。
最低0.47元/天 解锁文章
1287

被折叠的 条评论
为什么被折叠?



