STL中的Allocator

最近在看STL,写一点博客。

关于一些细节可能就不放上来了,就写一些我自己的心得。

1.为什么要用Allocator

C++容器的设计思路是,对存放到里面的东西是拷贝一份放进去。

而且里面的空间都是动态分配的。

所以在构建容器的时候,需要必要的①内存分配②构造对象。


2.new operator、operator new、placement new

(1)new operator

就是我们平时所使用的new/delete

new包含的,意思包括①分配内存②构造对象

(2)operator new

用来分配内存,相当于malloc

operator delete相当于free

(3)placement new

用来构造对象,需要给出指定的地址,以及传递给构造函数的参数


3.SGI STL的allocator

在侯捷剖析的STL中,有2个内存分配器

①std::allocator

这个是符合STL的allocator标准的分配器,实现就是采用的operator new 和 operator delete

②alloc

这个是当时的SGI STL自己所使用的默认内存分配器

分了两层机制

第一层,分配128Bytes以上的,采用的是malloc和free来分配内存

第二层,分配128Bytes以下的,采用的是memory pool的概念

程序再使用二层的时候,直接向free_list申请内存,如果free_list不足,它再向memory pool申请

memory pool是一段很大的连续内存,而memory pool不足的情况下,再向heap malloc内存。


4.当前的GCC的实现

GCC是基于SGI实现的。

但是我现在所使用的GCC 4.9.2,的容器stl_vector、stl_list等都没有使用alloc作为默认的,而是直接使用std::allocator了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值