2012-01-08 28 views
8

このトピックにはすでにトピックがありますが、私はまだ疑問があります。 1が正しいベクトルの大きさを計算するには: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

+4

@jrokの可能性の重複:それはどのように実装作品によっては、唯一の推測です。 –

答えて

12

あなたは、ベクトルの大きさとはどういう意味ですか?ベクトルオブジェクトのサイズがちょうど

sizeof(vec); 

であるあなたは、ベクターは、ヒープに割り当てられたどのくらいのメモリに興味があるなら、あなたはとても

vec.capacity()*sizeof(T) 

を使用することができ、あなたはこれらを追加する場合は、あなたの」あなたがベクトルのために "失われた"どのくらいのメモリを取得します。

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

割り当てられるメモリの量は、実装によって異なります。上記の公式はとなるでしょう。すべての実装ではないにしても、実際にはが正しい(またはほぼ正しい)でしょう。

+1

これは、実装がどのように動作するかによって、推測に過ぎません。 –

+9

@Dietrich:あなたは実際に私の答えを読んだのですか? –

+0

私は、 'vector' *をどのようにして有効に実装できるかという制約があると、' vector'とその内容が占めるメモリの量に正しい*下限*を与えると思います。 +1。 –

0

あなたはタイプが他の長い長い何も変更する必要がないと言ってint型から変更された場合、ベクトル

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

内に含まれるデータのサイズを知りたい場合。私は、この解決策が、サイズの小さいタイプを使用した方が安全であることを発見しました。

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