考慮到內存開銷對於我的應用程序至關重要,我認爲對於上述兩個選項來說,後者會更輕。我對麼?我基於這個事實,矢量有4個指針的內存開銷,以跟蹤begin()
,end()
,size()
和分配器。因此,對於整個模型的總大小將是在std :: vector <std :: vector <T>> vs std :: vector <T*>
(4*sizeof(T*) + sizeof(T)*Ni)*No + 3*sizeof(std::vector<T>*)
在此順序,我假定Ni
,No
是在內部和外部矢量元素的數量,resply。通過使用後者表達式,我希望能夠保存4*sizeof(T*)*No
因爲在我的應用程序中,No
是巨大的,而Ni <<<< No
。爲了解決這個問題,No
的數量級爲100
萬,Ni
通常是3
至50
。
提前感謝您的關注和任何想法。
注意:我明白並且非常樂意支付處理指針的價格。分配,遍歷和釋放它,而且我可以做到這一點,而沒有任何顯着的性能開銷。
一個'開始() ','end()'和'size()'是多餘的。 「矢量」並不是那麼糟糕。 – 2014-01-09 15:12:43
如果你正在分配大量的元素,'std :: vector'可能會有問題,因爲它需要連續分配內存。根據你的需要,'std :: deque'可能會有幫助。 –
「在我的申請中,」不「是巨大的,而'Ni' <<<<'否'。」一個明顯的解決方案是切換內部和外部矢量的索引,除非需要傳遞內部矢量。 – dasblinkenlight