这段时间,重读了侯捷先生的《stl源码剖析》,感受跟第一次读还是有不一样的。有些以前比较难以理解的点,现在能轻松看懂。两次读下来,感觉自己对stl整体模块开始有了粗浅的认识。下面请允许我说下对stl粗浅的几点认识,只讲重点:
1 空间分配器(allocator):
sgi stl(以下说stl都是指sgi版本)采用两级分配策略,1)大块内存申请时分配,不用时即刻销毁,不回收利用;2)小块内存销毁时回收利用,如果确实没有就重新分配,分配时也是大块分配(chunk allocation)。大和小的区别是128byte。
2 容器(container):
分序列容器和关联容器,区分标准是:是否以key作索引去找值。
序列容器:
1)vector
最常见,可以看做是可以自动管理增删操作的array,重点要记住 A 内存不足时分配策略是double, B index 操作O(1),增删O(n)