空间配置器

set_new_handler : 设置new空间失败的一些处理,他接收一个函数指针作为参数,其类型为:

typedef void (*new_handler)

new (p) T1(value) :  在p所指向的内存空间构造T1类型的对象,并调用构造函数T1(value).


1. SGI 空间配置器, std::alloc

STL 内存配置操作由alloc::allocate()负责,内存释放操作由alloc::deallocate()负责;对象构造由::construct()负责,对象析构操作由::destroy()负责。



2.  construct() & destroy()

construct()接收一个指针p和一个初值value, 该函数的用途是将初值设定到指针所指的空间上。

destroy()有两个版本,第一版本接收一个指针,准备将指针所指之物析构掉;第二版本接受first和last两个迭代器,准备将[first, last)范围内的所有对象析构掉,但如果每次调用的都是无关紧要的函数则是对效率的一种消耗。因此,利用value_type()获得迭代器所指对象的类型,再利用__type_traits<T>判断该类型的析构函数是否无关紧要。若是(__false_type),则什么也不做;若不是(__false_type),才循环调用第一版本的destroy().


3. 第一级与第二级配置器

SGI STL 第一级配置器                            

template<int inst>

class __malloc_alloc_template {...};

1. allocate()直接使用malloc(), deallocate()直接使用free().

2. 模拟C++的set_new_handler()以处理内存不足的情况


SGI STL 第二级配置器

template <bool threads, int inst>

class __default_alloc_template {...};

1. 维护16个自由链表(free lists),负责16种小型区块的次配置能力。内存池以malloc()分配得到。如果内存不足,则调用第一级配置器的new失败的处理程序。

2. 如果需求区块大于128字节,则转调用第一级配置器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值