這兩天略讀完了《STL源碼剖析》,之所以是略讀,就是只看大體,不講具現(這個詞在《深度探析C++對象模型》中比較多)
已經看過好幾本C++的書了,感覺C++本身設計的博大精深,而C++編譯器就更是一個神奇的東西,換句話說,你永遠不知道C++編譯器背着你做了哪些出乎你意料的事
不扯遠了
我主要是想看STL容器的具體實現而去看《STL源碼剖析》的,的確收獲不少,但不止着一個,總結而言,大概有三點覺得印象很深
- 內存分配:所謂分配有兩級實現,大於128k內存由第一級實現(malloc和free);小於128k的由第二級實現,第二級采用內存池的思想,內部分配了8的倍數的內存,如,8k, 16k,24k,32k,40k,...128k。這個分配方法,一來體現了內存池的分配方式,另外讓我想起了linux內存的伙伴系統,似乎有異曲同工之妙
- Traits編程方式:首先看設計模式的迭代器模式“提供了訪問類的接口而不暴露類的具體實現”,這就是所謂的特性編程,什么叫做特性編程呢,我想我可以這么理解:一組事物會表現出某種特性,而你掌握了這種特性,你就掌握了跟它交流的方法,就好比語言,一旦你知道了如何講普通話,你就可以和其他人交流而不用具體限定跟哪個人,普通話可以作為中國人的一種特性。
- 實現方式:映像深刻的就是list是雙向鏈表實現的,deque用的結構很復雜,用地址map偽裝成兩端可讀寫的容器,大概就是一個又一個連續的內存塊,通過一個地址映射將它們都串起來,其它的我都好像已經看過了,已經了解了
先就這么簡單的總結總結吧