SGI_STL空间配置器源码剖析(一)总览

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

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值