STL源码剖析(侯捷版本) —— 第二章 空間配置器 allocator(一)

第二章内容传送门
STL源码剖析(侯捷版本) —— 第二章 空間配置器 allocator(一)
STL源码剖析(侯捷版本) —— 第二章 空間配置器 allocator(二)
STL源码剖析(侯捷版本) —— 第二章 空間配置器 allocator(三)
STL源码剖析(侯捷版本) —— 第二章 空間配置器 allocator(四)
STL源码剖析(侯捷版本) —— 第二章 空間配置器 allocator(五)
STL源码剖析(侯捷版本) —— 第二章 空間配置器 allocator(六)
STL源码剖析(侯捷版本) —— 第二章 空間配置器 allocator(七)

前言. STL(标准模板库)中的空间配置器(allocator)的重要性

1.从用户角度:空间配置器常被忽略

在 STL 的使用中,空间配置器是用户“不需要关注”的部分。它始终隐藏在 STL 组件(如容器)的背后,默默完成内存分配和管理的任务。用户使用 STL 容器时,很少直接接触空间配置器的细节。

2.从实现角度:空间配置器非常重要

对于 STL 的实现者来说,空间配置器却是必须优先了解和实现的。因为 STL 的所有数据操作都依赖容器,而容器的核心功能是管理数据的存储。要深入理解 STL 的实现原理,首先需要掌握空间配置器的工作机制,否则可能会在分析其他 STL 组件的实现时遇到障碍。

3.为何称为“空间配置器”而非“内存配置器”

a.空间的广义性

空间配置器不仅仅局限于管理内存,还可以用于管理其他类型的存储空间。例如,某些 allocator 实现可以分配磁盘空间或其他辅助存储设备的空间。

b.适配性

这表明 allocator 是一个通用的工具,可以根据具体需求扩展到管理非内存类型的存储资源。尽管 SGI STL 中的默认 allocator 是针对内存设计的,但概念上,它可以应用于更广泛的存储空间。

4.SGI STL 的具体实现

这里特别提到 SGI STL 提供的 allocator 是以分配内存为目标的,即它的“空间”实际上指的是计算机内存。

2.1 Allocator 的标准接口概述 (基于 STL 规范)

STL 的 Allocator 是一个标准化的内存分配接口,定义了类型别名、内存分配与释放,以及对象构造与销毁的功能。它通过泛型和嵌套类型支持不同对象类型的内存管理,是 STL 容器内存操作的核心工具。

a. 类型定义(Type Definitions)

Allocator 提供了一组类型定义,用于描述内存管理中涉及的元素类型和指针类型等:

allocator::value_type:分配的对象类型。
allocator::pointer:指向分配对象的指针类型。
allocator::const_pointer:指向分配对象的常量指针类型。
allocator::reference:分配对象的引用类型。
allocator::const_reference:分配对象的常量引用类型。
allocator::size_type:表示大小的无符号整数类型。
allocator::difference_type:表示指针距离的有符号整数类型。
allocator::rebind:嵌套的模板类,用于将分配器绑定到其他类型。
定义方式:template<class U> struct rebind {
    typedef allocator<U> other; }

b. 构造函数与析构函数

allocator::allocator():默认构造函数。
allocator::allocator(const allocator&):拷贝构造函数。
template<class U> allocator::allocator(const allocator<U>&):泛型的拷贝构造函数,用于从其他类型的分配器创建。
allocator::~allocator():析构函数。

c. 成员函数

pointer address(reference x) const:返回某个对象的地址,等同于 &x。
const_pointer address(const_reference x) const:返回常量对象的地址,等同于 &x。
pointer allocate(size_type n, const void* hint = 0):分配
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值