llvm::SmallVector<T,N>
के कार्यान्वयन कई प्रकार के बीच विभाजित है:क्यों llvm :: SmallVector अपने भंडारण को विभाजित करता है?
llvm::SmallVectorBase
, शुरू अंत में, और क्षमता के लिए रखती है 3void*
रों।llvm::SmallVectorTemplateCommon<T>
पहले छोटे भंडारण के तत्व को रखता है, उचित रूप से गठबंधन और आकारchar
सरणी के रूप में।llvm::SmallVector<T,N>
उचित भंडारण के आकारN-1
तत्वों को उचित रूप से गठबंधन औरchar
सरणी के आकार के रूप में रखता है।
क्यों है दो वर्ग टेम्पलेट्स के बीच भंडारण विभाजन, के रूप में आधार वर्ग के लिए नीचे सबसे व्युत्पन्न वर्ग (SmallVector<T,N>
) बस सभी N
तत्वों की दुकान है और इस भंडारण की ओर इशारा में पास होने के लिए विरोध किया? यही कारण है, जहां वर्तमान में डिफ़ॉल्ट निर्माता करता है:
SmallVector() : SmallVectorImpl<T>(N) { }
एक काल्पनिक विभिन्न कार्यान्वयन कर सकता है:
SmallVector() : SmallVectorImpl<T>(&Storage, T * sizeof(N)) { }
और SmallVectorTemplateCommon
FirstEl
सदस्य नहीं होगा। कार्यान्वयन का क्या फायदा है क्योंकि यह खड़ा है?
एक 'छोटा वेक्टर' हमेशा छोटा नहीं होता है, इसलिए आपको 'स्टार्ट' से स्वतंत्र छोटे संग्रहण में पॉइंटर प्राप्त करने का एक तरीका चाहिए। यह आसानी से '& firstEl' के रूप में उपलब्ध है। –
@ टी.सी. आपको इसकी आवश्यकता क्यों होगी? – Barry
आप कैसे बताते हैं कि वेक्टर वर्तमान में इसके बिना छोटे मोड में है (या कुछ समकक्ष जानकारी)? –