STL-源码剖析
STL 六大组件 功能与运用
1. 容器
各种数据结构 ,vector ,list ,deque,set,map,从实现角度来看,STL容器是一种class template
2. 算法
各种常用算法,sort,search,copy,erase,从实现角度来看,STL容器是一种function template
3. 迭代器
扮演容器与算法之间的胶合剂,泛型指针,有五种类型,从实现角度来说,就是把operator*,operator->,opreator++,opreator–等指针相关操作予以重载的class template ,每个STL容器都附带有自己专属的迭代器。原生指针也是一种迭代器。
4. 仿函数
什么是仿函数?
行为类似函数。 好好体会下这句话
5. 配接器(adapters)
顾名思义,想想配接器模式(adapter design)
6. 配置器(allocators)
负责空间配置与管理,实现了动态空间配置,空间管理,空间释放。
空间配置器(allocator)
SGI设计了双层级配置器(面试会被问道),主要是为了解决小型区块所可能造成的内存破碎问题。
SGI第一级配置器通过 malloc和 free 完成内存的配置与释放。第二级配置器则通过不同的策略来进行操作:首先,看配置区块的大小,看其是否超过128bytes,是的话,给第一级配置器,当配置器区块小于128bytes时,采用memory pool 整理方式。
那么,究竟只用第一级就OK,还是同时都用呢,要看__USE_MALLOC 这个参数是否被定义。(侯捷老师这里注:说这个参数名字并不理想,因为无论如何malloc总是要被调用的,对吧)。具体过程看下图。
下面逐个讲解第一级配置器和第二级配置器
第一级配置器:
实现