上一篇我们介绍了STL对象的构造与析构,这篇介绍STL内存的配置与释放。 STL有两级空间配置器,默认是使用第二级。第二级空间配置器会在某些情况下去调用第一级空间配置器。空间配置器都是在allocate函数内分配内存,在deallocate函数内释放内存。 第一级空间配置器 第一级配置器只是对mal ...
分类:
其他好文 时间:
2017-07-17 20:07:03
阅读次数:
157
std::allocator即空间配置器,用于内存分配。更多的细节建议大家研究相关源码。 这里仅是利用std::allocator来实现简单的自定义vector类,如有问题欢迎指正。 以下是测试代码: 测试结果: ...
分类:
其他好文 时间:
2017-06-24 00:22:52
阅读次数:
272
STL(Standard Template Library,标准模板库), 组成: STL可分为容器(containers)、迭代器(iterators)、空间配置器(allocator)、配接器(adapters)、算法(algorithms)、仿函数(functors)六个部分。 容器部分主要由 ...
分类:
其他好文 时间:
2017-06-17 17:18:03
阅读次数:
167
MiniSTL 目前正在完成一个STL,主要想通过该项目锻炼C++编程、模板编程、熟悉STL、锻炼数据结构和算法能力。 项目的目标是实现STL的几大构件+线程安全。项目过程中主要参考SGI STL源码,项目名称为:MiniSTL。 目前已完成空间配置器和迭代器部分,接下来会去实现容器和算法,最后还会 ...
分类:
编程语言 时间:
2017-06-10 19:31:57
阅读次数:
221
SGI STL 第二级配置器使用的是memory pool,即内存池,相比较于第一级空间配置器,第二级空间配置器多了许多限制,主要是为了防止申请小额区块过多而造成内存碎片。当然小额区块在配置时实际上是对空间配置器效率的一种伤害。另外,索求任何一块内存,都得需要一些额外内存来进行标记,虽然这些标记占内 ...
分类:
其他好文 时间:
2017-05-04 22:00:42
阅读次数:
350
以下是这两个函数的整体示意图: construct()和destroy()函数必须被设计为全局函数,STL规定空间配置器必须包含这两个成员函数,但是std::alloc的配置器并没有遵循这一规则。 以下是包含在<stl_construct.h>头文件中的两个函数的的定义: 上述 _Construct ...
分类:
其他好文 时间:
2017-05-03 11:41:14
阅读次数:
422
将以上空间配置器 m_allocator::_m_alloctor应用于程序中,只能有限度搭配PJ STL 和RW STL(两种不同版本STL源码),因为PJ STL未完全遵循STL规格,其所供应的许多容器都需要一个非标准的空间配置器接口allocator::_Charalloc(), 而RW ST ...
分类:
其他好文 时间:
2017-05-02 18:16:37
阅读次数:
168
1. STL的空间配置器 SGI STL设计了双层级配置器,第一级配置器直接使用malloc()、free(),第二级配置器则视情况采用不同的策略:当配置区块超过128bytes时,视为“足够大”,便调用第一级配置器;当配置区块小于128bytes时,视为“过小”,为降低额外负担,便采用复杂的mem ...
分类:
其他好文 时间:
2017-03-15 00:20:37
阅读次数:
226
前言 以STL的实现角度而言,第一个需要介绍的就是空间配置器,因为整个STL的操作对象都存放在容器之中。 你完全可以实现一个直接向硬件存取空间的allocator。 下面介绍的是SGI STL提供的配置器,配置的对象,是内存。(以下内容来自《STL源码剖析》) 空间配置器的标准接口 根据STL的规范 ...
分类:
其他好文 时间:
2017-03-01 00:43:38
阅读次数:
315
2.1 空间配置器的标准接口 allocator的必要接口: allocator::value_type allocator::pointer allocator::const_pointer allocator::reference allocator::const_reference alloc... ...
分类:
其他好文 时间:
2017-01-12 21:18:38
阅读次数:
227