
STL源码剖析
文章平均质量分 65
幽人_never
这个作者很懒,什么都没留下…
展开
-
STL源码剖析--空间配置器alloc
空间的配置与释放std::allocSGI对对象构造前的空间配置与对象析构的空间释放设计哲学为: * 向system heap要求空间。 * 考虑多线程状态。 * 考虑内存不足时的应变措施。 * 考虑过多“小型区块”可能造成的内存碎片问题。在C++中内存配置的基本操作是::operator new(),内存释放基本操作是::operator delete()。而这两个全局函数相当于...原创 2018-04-14 18:01:16 · 288 阅读 · 1 评论 -
STL源码剖析--空间配置器的设计与对象的构造和析构设计
STL空间配置器在C++中,我们习惯的内存配置操作和释放操作是这样的:class Foo { ... };Foo* pf = new Foo; //配置内存,然后构造函数delete pf; //将对象析构,然后释放内存我们一步可以干的事,其实在new和delete算式中都包含两个阶段的操作:对于new: 1.配置内存 ::o...原创 2018-04-02 23:48:34 · 283 阅读 · 0 评论 -
STL源码剖析--第二配置器allocate()和deallocate()
allocate()和deallocate()SGI对第二配置器的allocate()和deallocate()的实现 static void* allocate(size_t __n) { void* __ret = 0; //如果大于128 bytes,调用使用第一级配置器 if (__n > (size_t) _MAX_BYTES) { ...原创 2018-04-19 21:08:18 · 905 阅读 · 0 评论 -
STL源码剖析--重新填充refill()及内存池
重新填充free lists当我们在allocate()分配内存时,如果free list中没有可用的区块,我们调用了_S_refill(),准备为free list重新填充空间,新的空间将取自内存池(由chunk_alloc()完成),缺省取得20个新的节点,但万一内存池空间不足,获得的节点数可能小于20。//返回一个大小为n的对象,并且有时候会为适当的free list增加节点/...原创 2018-04-19 21:11:32 · 887 阅读 · 0 评论 -
STL源码剖析--内存基本处理工具
内存基本处理工具STL定义有5个全局函数,除了前面的construct(),destory(),还有uninitialized_copy()、uninitialized_fill()、uninitialized_fill_n()函数,它们三个分别应用于STL中高层次函数:copy()、fill()、fill_n()。uninitialized_copytemplate <...原创 2018-04-21 12:38:27 · 267 阅读 · 0 评论 -
STL源码剖析--迭代器概念与traits技法
迭代器概念与traits技法3.1 迭代器设计思维STL的中心思想在于:将数据容器和算法分开。而迭代器就是将数据容器与算法连接起来。以find()函数为例:template<class InputIterator,class T>InputIterator find(InputIterator first, InputI...原创 2018-07-28 10:17:07 · 206 阅读 · 0 评论