12
的llvm::SmallVector<T,N>
實現被分割以及很多類型:爲什麼llvm :: SmallVector拆分其存儲?
llvm::SmallVectorBase
保持3個void*
S代表開始,結束和容量。llvm::SmallVectorTemplateCommon<T>
持有第一個元素的小型存儲,作爲一個適當的排列和大小排列的char
陣列。llvm::SmallVector<T,N>
擁有下一個N-1
元素的小型存儲,作爲一個陣列的適當排列和大小的陣列。
爲什麼是兩個類模板之間的存儲分裂,而不是具有最派生類(SmallVector<T,N>
)簡單地存儲所有N
元素和指針傳遞給該存儲下來的基類?也就是說,在目前的默認構造函數:
SmallVector() : SmallVectorImpl<T>(N) { }
一個假設的不同實現可以這樣做:
SmallVector() : SmallVectorImpl<T>(&Storage, T * sizeof(N)) { }
和SmallVectorTemplateCommon
不會有FirstEl
成員。目前實施的優勢是什麼?
'SmallVector'並不總是很小,所以您需要一種方法來獲取獨立於'begin'的指向小存儲的指針。這可以通過'&firstEl'方便地獲得。 –
@ T.C。你爲什麼需要它? – Barry
如何判斷矢量是否處於沒有它的小模式(或一些等效信息)? –