2012-01-08 144 views
8

這個主題已經有一個主題,但我仍然有疑問。要計算一個向量的大小,哪一個是正確的:sizeof()std :: vector(C++)

sizeof(VEC) + sizeof(int) * VEC.capacity() 

VEC.capacity() * (sizeof(VEC) + sizeof(int)) 
+0

[載體的sizeof()的可能重複(http://stackoverflow.com/questions/2373189/sizeof-a-vector) – Joe 2012-01-08 13:56:26

+4

@jrok:這只是一個猜測,這取決於如何實施有效。 – 2012-01-08 13:56:34

回答

12

你說的矢量的大小是什麼意思?矢量對象的大小僅僅是

sizeof(vec); 

如果你有興趣有多少內存的載體已經在堆上分配,則可以使用

vec.capacity()*sizeof(T) 

所以,如果你添加這些,你」會得到你因爲矢量而「失去」了多少內存。

vec.capacity()*sizeof(T) + sizeof(vec) 

請注意,具體分配多少內存取決於實現。只是上面的公式將是實際上在大多數(如果不是全部)實現上是正確的(或大致正確)。

+1

這只是一個猜測,取決於實現的工作方式。 – 2012-01-08 13:56:49

+9

@Dietrich:你真的看過我的回答嗎? – 2012-01-08 13:57:25

+0

我認爲,考慮到'vector' *可以被有效實現的約束條件,這給了'vector'及其內容佔用的內存量的正確*下限*。 +1。 – 2012-01-08 13:59:18

0

如果你想如果類型從int改口說很久很久沒有別的要改變認識包含矢量

std::vector<int> vec; 
... 
vec.size() * sizeof(decltype(bufferIn)::value_type)) 

中的數據的大小。我發現這個解決方案比使用sizeof中的類型更安全,因爲它可以輕鬆地在沒有其他的情況下進行更改。

std::vector<long long> vec; // lets go from int to int64 
... 
vec.size() * sizeof(int); // woops problem on the horizon