STL 源码剖析:2、空间配置器


以 STL 的运用角度而言,空间配置器是最不需要介绍的东西,它总是隐藏在一切组件(更具体地说是指容器,container)的背后,默默工作,默默付出,但若以STL的实现角度而言,第一个需要介绍的就是空间配置器,因为整个 STL 的操作对象(所有的数值)都存放在容器之内,而容器一定需要配置空间以置放资料。不先掌握空间配置器的原理,难免在阅读其它STL组件的实现时处处遇到挡路石。

为什么不说 allocator 是内存配置器而说它是空间配置器呢?因为空间不一定是内存,空间也可以是磁盘或其它辅助存储介质。是的,你可以写一个 allocator,直接向硬盘取空间。以下介绍的是SGI STL提供的配置器,配置的对象,呃,是的,是内存。



2.1 空间配置器的标准接口


2.1.1设计一个简单地空间配置器



2.2 具备次配置力的 SGI 空间配置器


SGI STL 的配置器于总不同,也与标准规范不同,其名称是 alloc 而非 allocator,而且不接受任何参数。

2.2.1 SGI 标准的空间配置器

2.2.2 SGI 特殊的空间配置器

2.2.3 构造和析构的基本工具

2.2.4 空间的配置与释放

2.2.5 第一级配置器剖析

2.2.6 第二级配置器剖析

2.2.7 空间配置函数

2.2.8 空间释放函数

2.2.9 重新填充 free lists

2.2.10 内存池



2.3 内存基本处理工具


STL 定义有五个全局函数,作用于未初始化空间上,这样的功能对于容器的实现很有帮助。

2.3.1 uninitialized_copy

2.3.2 uninitialized_fill

2.3.3 uninitialized_fill_n

猜你喜欢

转载自blog.csdn.net/qq_30534935/article/details/102847279