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))
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))
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, .
To tylko domysły, w zależności od tego, jak działa wdrożenie. –
@Dietrich: Czy przeczytałeś moją odpowiedź? –
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. –
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
możliwe duplikat [sizeof() wektorem] (http://stackoverflow.com/questions/2373189/sizeof-a-vector) – Joe
@jrok: To tylko przypuszczenie, w zależności od sposobu realizacji robót . –