转:http://www.cnblogs.com/moondark/p/3436450.html
这两天略读完了《STL源码剖析》,之所以是略读,就是只看大体,不讲具现(这个词在《深度探析C++对象模型》中比较多)
已经看过好几本C++的书了,感觉C++本身设计的博大精深,而C++编译器就更是一个神奇的东西,换句话说,你永远不知道C++编译器背着你做了哪些出乎你意料的事
不扯远了
我主要是想看STL容器的具体实现而去看《STL源码剖析》的,的确收获不少,但不止着一个,总结而言,大概有三点觉得印象很深
- 内存分配:所谓分配有两级实现,大于128k内存由第一级实现(malloc和free);小于128k的由第二级实现,第二级采用内存池的思想,内部分配了8的倍数的内存,如,8k, 16k,24k,32k,40k,...128k。这个分配方法,一来体现了内存池的分配方式,另外让我想起了linux内存的伙伴系统,似乎有异曲同工之妙
- Traits编程方式:首先看设计模式的迭代器模式“提供了访问类的接口而不暴露类的具体实现”,这就是所谓的特性编程,什么叫做特性编程呢,我想我可以这么理解:一组事物会表现出某种特性,而你掌握了这种特性,你就掌握了跟它交流的方法,就好比语言,一旦你知道了如何讲普通话,你就可以和其他人交流而不用具体限定跟哪个人,普通话可以作为中国人的一种特性。
- 实现方式:映像深刻的就是list是双向链表实现的,deque用的结构很复杂,用地址map伪装成两端可读写的容器,大概就是一个又一个连续的内存块,通过一个地址映射将它们都串起来,其它的我都好像已经看过了,已经了解了
先就这么简单的总结总结吧