面經筆記 STL

2021-09-30 14:15:16 字數 2647 閱讀 1787

空間配置器:

為什麼不說allocator是記憶體配置器:空間不一定是記憶體,空間也可以是磁碟或其他儲存介質,你可以寫乙個allocator直接向硬碟取空間。

sgi stl的配置器名為alloc,是預設的空間配置器。

雖然也定義了乙個符合部分標準的allocator配置器,但只是把c++中new和delete簡單包裝而已,效能不佳。

sgi std::alloc:

new包含了:operator new記憶體配置 和 物件構造 兩個過程。

delete包含了: 物件析構 和 operator delete記憶體釋放

stl 將兩個階段操作區分開來:

考慮小型區塊造成的記憶體破碎問題,sgi設計了雙層級配置器

記憶體池

記憶體池管理:每次配置一大塊記憶體,並維護對應之自由鍊錶:free_list,下次若還有相同大小的記憶體需求,直接從鍊錶中拔出,如果客戶端釋還小額區塊,就由配置器**到free_list中。為了方便管理,任何小額記憶體需求均上調至8的倍數。

allocator需要維護乙個儲存16個空閒塊列表表頭的陣列free_list,陣列元素i是乙個指向塊大小為8*(i+1)位元組的空閒塊列表的表頭,乙個指向記憶體池起始位址的指標start_free和乙個指向結束位址的指標end_free。空閒塊列表節點的結構如下:

union obj 

;

這個結構可以看做是從乙個記憶體塊中摳出4個位元組大小來,當這個記憶體塊空閒時,它儲存了下個空閒塊,當這個記憶體塊交付給使用者時,它儲存的時使用者的資料

當free_list不夠時,從記憶體池中取新空間為free_list填充新空間。

當記憶體池不夠時,從堆申請新空間。

當堆不夠時,交由第一級配置器使用類似new_handler機制處理。

iterator

traits(萃取)技術:

利用模板的引數推導機制,獲取任意迭代器的特徵資訊:

templatestruct  iterator_traits

如果t定義有自己的value_type,通過traits的作用,萃取出來的就是t::value_type。

這種多了一層間接性好處是可以擁有原生指標的偏特例化版本:如偏特例化原始指標版本iterator_traits和iterator_traits

原生指標int*雖不是一種類型別,亦可通過iterator_traits取其value_type。

序列容器:vector

頻繁對vector呼叫push_back()對效能的影響和原因:

push_back()將新元素插入vector尾端時,首先檢查是否還有備用空間,如果容量被用完,並不是在原空間後接續新空間,而是以原大小的兩倍重新分配一塊空間,將原內容拷貝過來,並新增上新元素,釋放原空間。

一旦push_back()引起空間重新配置,指向原vector的所有迭代器失效。

序列容器:list

雙向鍊錶

stl list是乙個環狀雙向鍊錶

序列容器:deque 雙向佇列

deque沒有容量(capacity)的概念,動態的以分斷連續空間組合而成,可以隨時增加一段新的空間並鏈結起來。

deque是由一段一段的連續空間構成,由迭代器維護整體連續的假象

中控器為乙個連續陣列空間(對映/map),每個元素都是指標,指向一段連續線性空間(緩衝區),緩衝區大小一致

在deque上排序很慢,可將資料拷貝至vector ,排序後拷貝回deque

容器介面卡:stack 棧

stack底層預設以deque實現,不提供迭代器

stack

>

stack

>

容器介面卡:queue 佇列

queue底層預設是deque實現,不提供迭代器

queue

>

queue

>

heap只有演算法,屬於幕後工作者,是優先佇列的助手

容器介面卡:priority queue 優先佇列

優先佇列預設是最大堆實現

最大堆預設是vector實現的完全二叉樹:

priority_queue,less>

priority_queue,greater>

面經筆記 管道

匿名管道只能實現本機機器上兩個程序的通訊,通常用來在父子程序間通訊,不能實現跨網路的通訊。下面只貼出核心 父程序 void cparentview onpipecreate startupinfo sui 建立新程序所需資訊結構體 process information pi 程序資訊結構體 zer...

面經 葫蘆面經

1 給定乙個n位數,例如12345,從裡面去掉k個數字,得到乙個n k位的數,例如去掉2,4,得到135,去掉1,5,得到234。設計演算法,求出所有得到的 n k位數裡面最小的那乙個 2 找明星 n個人中,只有乙個明星 明星不認識其他所有的人,而其他人 都認識明星,這些人中也可能相互認識。你每次只...

面經筆記 cuda gpu概念

與cuda相關的幾個概念 thread,block,grid,warp,sp,sm。sp 小核 流處理器 最基本的處理單元,streaming processor 最後具體的指令和任務都是在sp上處理的。gpu進行平行計算,也就是很多個sp同時做處理 sm 大核 流多處理器 多個sp加上其他的一些資...