union obj{
obj * free_list_link ;
char client_data[1] ;
};
__default_alloc_template拥有配置器标准接口函数deallocate()。该函数首先判断区块大小,大于128bytes就调用第一级配置器,小于128bytes就找出相应的free list将区块回收:
//p is not 0/null
static...
分类:
其他好文 时间:
2014-12-11 20:58:11
阅读次数:
169
STL是建立在泛化之上的。数组泛化为容器,参数化了所包含的对象的类型。函数泛化为算法,参数化了所用的迭代器的类型。指针泛化为迭代器,参数化了所指向的对象的类型。STL中的六大组件:容器、算法、迭代器、配置器、适配器、仿函数。
这六大组件中在容器中分为序列式容器和关联容器两类,正好作为STL源码剖析这本书的内容。迭代器是容器和算法之间的胶合剂,从实现的角度来看,迭代器是一种将operator*、o...
分类:
其他好文 时间:
2014-12-08 00:55:58
阅读次数:
213
这里首先给出容器map的原型:template , class Alloc = alloc>class map{ ...} 可以看到模板参数一共有四个,第一个就是Key,即键;第二个就是值;第四个就是空间配置器,默认使用alloc(随STL版本不同而不同)。那么第三个是啥? 我们知道,map...
分类:
其他好文 时间:
2014-11-15 00:02:29
阅读次数:
267
在C++标准中,STL被组织为下面的13个头文件:、、、、、、、、、、、、、、、和。 STL可分为容器(containers)、迭代器(iterators)、空间配置器(allocator)、配接器(adapters)、算法(algorithms)、仿函数(functors)六个部分。 容器 容器部...
分类:
其他好文 时间:
2014-11-09 23:39:28
阅读次数:
324
看完自己重写了一下,不知道的又看了一遍。
Mempool.h
#ifndef MEMPOOL_H_
#define MEMPOOL_H_
#include
#include
#include
namespace flysnow {
enum {STEP_ = 8};
enum {MAX_BYTES_ = 128};
enum {FREELIST_NUM_ = MAX...
分类:
其他好文 时间:
2014-10-17 00:35:13
阅读次数:
336
今天在读《STL源码剖析》空间配置器第二级时看到了这句,有点不解,于是查阅后知:obj后面是个指针 STL_VOLATILE也应该是个类型定义的吧,程序中应该有define来对它定义。所以就是指针的指针。。指针,也就是地址,所以是__my_free_list是一个地址,*__my_free_list...
分类:
其他好文 时间:
2014-09-03 00:13:05
阅读次数:
420
第二章:空间配置器 allocator SGI特殊的空间配置器,std::alloc SGI是以malloc()和free()完成内存的配置与释放。 SGI设计了双层级配置器: 第一级配置器直接使用malloc()和free(); _malloc_alloc_template ...
分类:
其他好文 时间:
2014-09-02 22:40:25
阅读次数:
237
一、SGI STL配置器简介
SGI STL的配置器与众不同,它与标准规范不同。如果要在程序中明确使用SGI配置器,那么应该这样写:
[cpp]
view plaincopyprint?
vectorint,std::alloc> iv;
他的名字是alloc,而且不接受任何参数。标准配置器的名字是allocator,而且可以接受参数。
SGI S...
分类:
其他好文 时间:
2014-08-26 11:49:26
阅读次数:
243
本文讲解SGI STL空间配置器的第二级配置器。
相比第一级配置器,第二级配置器多了一些机制,避免小额区块造成内存的碎片。不仅仅是碎片的问题,配置时的额外负担也是一个大问题。因为区块越小,额外负担所占的比例就越大。
额外负担是指动态分配内存块的时候,位于其头部的额外信息,包括记录内存块大小的信息以及内存保护区(判断是否越界)。要想了解详细信息,请参考MSVC或者其他malloc实现。...
分类:
其他好文 时间:
2014-08-26 11:49:16
阅读次数:
201
这里非常的绕口 需要仔细的来看看: destory(): 显示调用一个对象的析构函数 相当于释放一个对象需要释放的一些动态内存 为下次真正释放对象做准备 deallocate():真正的释放一个内存块。这是一个上层封装也就是delete函数的上层封装 在STL的空间配置器中 有可能会调用dele.....
分类:
编程语言 时间:
2014-08-23 16:38:51
阅读次数:
224