2012-01-08 8 views
8

C'è già un argomento su questo argomento ma ho ancora dei dubbi. Per calcolare la dimensione di un vettore, che uno è corretto:sizeof() std :: vector (C++)

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

o

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

possibile duplicato del [sizeof() un vettore] (http://stackoverflow.com/questions/2373189/sizeof-a-vector) – Joe

+4

@jrok: questa è solo una supposizione, a seconda di come le opere di implementazione . –

risposta

12

Che cosa si intende per dimensione del vettore? La dimensione dell'oggetto vettore è solo

sizeof(vec); 

Se siete interessati a quantità di memoria il vettore ha stanziato sul mucchio, è possibile utilizzare

vec.capacity()*sizeof(T) 

Quindi, se si aggiunge questi, si' Otterrai la quantità di memoria che hai "perso" a causa del vettore.

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

Si noti che esattamente la quantità di memoria allocata dipende dall'implementazione. È solo che la formula sopra sarà praticamente corretta (o approssimativamente corretta) sulla maggior parte se non tutte le implementazioni.

+1

Questa è solo un'ipotesi, a seconda di come funziona l'implementazione. –

+9

@Dietrich: Hai davvero letto la mia risposta? –

+0

Penso che, dati i vincoli su come un 'vector' * può * essere validamente implementato, questo fornisce un * limite inferiore * corretto sulla quantità di memoria di un' vector' e del suo contenuto. +1. –

0

Se volete conoscere la dimensione dei dati contenuti all'interno del vettore

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

Se il tipo viene modificato da int a dire lungo niente altro tempo deve essere cambiato. Trovo che questa soluzione sia più sicura di quella che usa il tipo nella sizeof perché può essere facilmente modificata senza l'altra.

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