2012-01-08 19 views
8

Ya hay un tema sobre este tema pero todavía tengo dudas. Para calcular el tamaño de un vector, cuál es la correcta:sizeof() std :: vector (C++)

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

o

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

posible duplicado de [sizeof() un vector] (http://stackoverflow.com/questions/2373189/sizeof-a-vector) – Joe

+4

@jrok: Eso es sólo una suposición, dependiendo de cómo funciona la implementación . –

Respuesta

12

¿Qué quiere decir por el tamaño del vector? El tamaño del objeto vector es simplemente

sizeof(vec); 

Si usted está interesado en la cantidad de memoria que el vector se asigna en el montón, se puede utilizar

vec.capacity()*sizeof(T) 

Por lo tanto, si se suman estos, se' Obtendré la cantidad de memoria que "perdió" debido al vector.

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

Tenga en cuenta que la cantidad exacta de memoria asignada depende de la implementación. Es solo que la fórmula anterior será prácticamente correcta (o aproximadamente correcta) en la mayoría si no en todas las implementaciones.

+1

Eso es solo una suposición, dependiendo de cómo funciona la implementación. –

+9

@Dietrich: ¿Has leído mi respuesta? –

+0

Creo que, dadas las restricciones sobre cómo un 'vector' * puede * ser implementado válidamente, esto da un * límite inferior correcto * sobre la cantidad de memoria que un' vector' y su contenido ocupan. +1. –

0

Si desea saber el tamaño de los datos contenidos en el vector

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

Si se cambia el tipo de int a decir nada mucho tiempo más tiene que ser cambiado. Encuentro que esta solución es más segura que la que usa el tipo en el tamaño porque se puede cambiar fácilmente sin el otro.

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