《STL原始碼剖析》學習 STL體現的思想

2021-06-20 06:45:34 字數 677 閱讀 7664

stl總是盡量做到節省記憶體且效率最高,在看本書中也越來越有深的體會。這裡蒐集乙個stl中提高效率的方法。

1.物件的複製、析構等

如果將乙個區間中的所有的物件析構掉,這是如果範圍很大,每個析構都是無關痛癢的,對效率有很大傷害。

負責物件析構的destroy()有兩個版本,第乙個版本直接呼叫物件的析構函式;第二個版本,如果物件的析構是無關痛癢的(其__type_traits是true),則什麼也不做,否則,呼叫第乙個版本。

同理複製操作,如果複製操作是trivial assignmentoperator,則複製直接以最快的記憶體對拷貝方式(memmove())完成。

2.演算法

stl的演算法優化非常好,針對不同的迭代器,如forward、bidirectional、random iterator等,因為元素的訪問規則不一樣,設計了不同的演算法。

stl演算法中經常使用雙層架構,一般稱呼上層函式為dispatch function(分派函式、派送函式),令函式傳遞呼叫過程中產生迭代器型別(iterator category)的臨時物件,再利用編譯器的引數推導機制(argumentdeduction),自動呼叫某個函式。

上層函式呼叫時不分型別對待,其中來根據引數或者模板的類別,呼叫下層這個函式就會根據傳入的引數的型別分別過載不同的版本,來達到效率最高。一般巢狀呼叫的這個函式的某個引數為某個模板型別的value_type。

STL原始碼剖析

這兩天略讀完了 stl原始碼剖析 之所以是略讀,就是只看大體,不講具現 這個詞在 深度探析c 物件模型 中比較多 已經看過好幾本c 的書了,感覺c 本身設計的博大精深,而c 編譯器就更是乙個神奇的東西,換句話說,你永遠不知道c 編譯器揹著你做了哪些出乎你意料的事 不扯遠了 我主要是想看stl容器的具...

STL原始碼剖析

這兩天略讀完了 stl原始碼剖析 之所以是略讀,就是只看大體,不講具現 這個詞在 深度探析c 物件模型 中比較多 已經看過好幾本c 的書了,感覺c 本身設計的博大精深,而c 編譯器就更是乙個神奇的東西,換句話說,你永遠不知道c 編譯器揹著你做了哪些出乎你意料的事 不扯遠了 我主要是想看stl容器的具...

STL原始碼剖析

花了兩天時間略讀了一下 stl原始碼分析 看了個大體,對於細節並沒有深究。之所以想翻翻這本書,主要是想看看stl中的特性 介面卡的具體實現。看完之後收穫還是蠻大的,模板的各種組合讓我眼前一亮,下面大概總結一些內容。1.記憶體分配 sgi記憶體分配採用兩級實現,對於大記憶體塊的申請 大於128k 由第...