2012-01-08 36 views
8

Istnieje już temat na ten temat, ale wciąż mam wątpliwości. Aby obliczyć wielkość wektora, który z nich jest poprawna:sizeof() std :: vector (C++)

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

lub

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

możliwe duplikat [sizeof() wektorem] (http://stackoverflow.com/questions/2373189/sizeof-a-vector) – Joe

+4

@jrok: To tylko przypuszczenie, w zależności od sposobu realizacji robót . –

Odpowiedz

12

Co masz na myśli przez wielkość wektora? Wielkość obiektu wektorowego jest tylko

sizeof(vec); 

Jeśli jesteś zainteresowany, ile pamięci wektor przeznaczyła na stercie, można użyć

vec.capacity()*sizeof(T) 

Tak więc, jeśli dodać te, ty” Zdobędę ile pamięci "straciłeś" z powodu wektora.

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

Należy pamiętać, że dokładnie to, ile pamięci zostało przydzielone, zależy od implementacji. Chodzi o to, że powyższy wzór będzie poprawny (lub w przybliżeniu poprawny) na większości, jeśli nie we wszystkich implementacjach, .

+1

To tylko domysły, w zależności od tego, jak działa wdrożenie. –

+9

@Dietrich: Czy przeczytałeś moją odpowiedź? –

+0

Myślę, że biorąc pod uwagę ograniczenia co do tego, w jaki sposób "wektor" * może * być prawidłowo zaimplementowany, daje to poprawną * dolną granicę * na ilość pamięci jaką jest "wektor" i jego zawartość. +1. –

0

Jeśli chcesz wiedzieć rozmiaru danych zawartych w wektorze

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

Jeśli typ zmienia się z int powiedzieć, długo długo nic innego nie musi być zmieniana. Uważam, że to rozwiązanie jest bezpieczniejsze niż ten, który używa tego typu w rozmiarze, ponieważ można go łatwo zmienić bez drugiego.

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