空间配置器

1。空间配置器:内存池实现小块内存分配,对应到设计模式,单例模式(工具类,提供服务,一个程序只需要一个空间配置器即可),享元模式(小块内存统一由内存池进行管理)

2。迭代器:迭代器模式,模板方法

3。容器:STL的核心之一,其他组件围绕容器进行工作:迭代器提供访问方式,空间配置器提供容器内存分配,算法对容器中数据进行处理,仿函数伪算法提供具体的策略,类型萃取实现对自定义类型内部类型提取。保证算法覆盖性。其中涉及到的设计模式:组合模式(树形结构),门面模式(外部接口提供),适配器模式(堆栈,队列通过双端队列适配得到),建造者模式(不同类型树的建立过程)。

4。类型萃取:基于范型编程的内部类型解析,通过typename获取。可以获取迭代器内部类型value_type,价值链,引用等。

5。仿函数:一种类似于函数指针的可回调机制,用于算法中的决策处理,涉及:策略模式,模板方法。

6适配器:STL中的堆栈,队列通过双端队列双端队列适配实现,地图,设置通过RB-Tree适配实现。涉及适配器模式。

<强>关于六大组件之间的具体关系如图简单描述

空间配置器

ps(图技术比较水,见谅,如有错误,请指正)

,

貌似扯的多了,来谈谈主题《空间配置器》问题吧。

<强> STL空间配置器产生的缘由:

在软件开发,程序设计中,我们不免因为程序需求,使用很多的小块内存(基本类型以及小内存的自定义类型)。在程序中动态申请,释放。

这个过程过程并不是一定能够控制好的,于是乎,

注:内碎片:因为内存对齐/访问效率(CPU取址次数)而产生如用户需要3字节,实际得到4或8字者节的问题,其中的碎片是浪费掉的。

外碎片:系统中内存总量足够,但是不连续,所以无法分配给用户使用而产生的浪费。下边简单图解

空间配置器

这两个问题解释清楚之后,就来谈STL空间配置器的实现细节了

<强>实现策略

用户申请空间大于128 ?

是的:调用一级空间配置器

没有:调用二级空间配置器

<强>大致实现为:

二级空间配置由

一级空间配置器直接封装malloc,免费进行处理,增加了c++中的机制(这里其实也就是个略显牵强的装饰/适配模式了),增加内存分配时客户端可选处理机制。

<强>可配置性:

客户端可以通过宏__USE_MALLOC进行自定义选择是否使用二级空间配置器。

一级空间配置器就主要封装malloc,添加处理器机制了,这里就不罗嗦了,相信各位都是可以通过源码了解到的

关于二级空间配置器:

空间配置器


空间配置器