本文共 797 字,大约阅读时间需要 2 分钟。
最近在看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了。
转载地址:http://lniei.baihongyu.com/