• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

niezgodność w rozmiarze elementów wektora

Object Storage Arubacloud
0 głosów
159 wizyt
pytanie zadane 7 listopada 2015 w C i C++ przez Wilier Bywalec (2,570 p.)

Hej, 

robię testy prędkości dodawania i odejmowania elementów róznej wielkości do różnych kontenerów. 

Tak przy okazji wyszło mi coś dziwnego. Mianowicie wektor wypełniony 10 elementami typu int zajmuje 20 bajtów. Typ int to przecież 4 bajty więc zdrowy rozsądek podpowiada, że cały wektor powinen zajmować 40 bajtów. 

kod

for( int k=0; k<10; k++) {
	vector.push_back(k);
}

cout <<" rozmiar: "<<sizeof(vector)<<" ilosc elementow: "<<vector.size()<<endl;
		
for(int p=0; p<10; p++)
	cout << vector[p]<<" - "<<sizeof(vector[p])<<endl;

 

sprawdziłęm też, że każdy element wektora rzeczywiście ma 4bajty

czym jest to spowodowane? czy wektor robi jakąś konwersje typów? 

efekt

2 odpowiedzi

0 głosów
odpowiedź 7 listopada 2015 przez Wilier Bywalec (2,570 p.)
edycja 7 listopada 2015 przez Wilier
dobra, przepraszam za zamieszanie :D przecież ja sprawdzam rozmiar samej struktury wektora

a czy jest jakiś sposób realnego sprawdzenia ile zajmuje taki wypełniony wektor? poza mnożeniem ilości elementów * rozmiar każdego z nich
komentarz 7 listopada 2015 przez adrian17 Ekspert (344,860 p.)
...wywołanie .size()?

(a sizeof w C++ prawie nigdy nie powinieneś potrzebować w praktyce)
komentarz 7 listopada 2015 przez Wilier Bywalec (2,570 p.)
.size() zwraca ilość elementów
komentarz 7 listopada 2015 przez adrian17 Ekspert (344,860 p.)
To inaczej, co rozumiesz przez rozmiar wektora? Rozmiar samego obiektu, alokowanej przez niego pamięci czy sumę?
komentarz 7 listopada 2015 przez Wilier Bywalec (2,570 p.)
rozmiar w bajtach,
komentarz 7 listopada 2015 przez adrian17 Ekspert (344,860 p.)

Rozmiar czego ? Rozmiar std::vector jest stały, zależny od implementacji i wynosi sizeof(vector). Obszar pamięci zaalokowany przez niego dynamicznie, jak powiedział kolega w odpowiedzi wyżej, wynosi w bajtach vec.capacity() * sizeof(vec[0]).

komentarz 7 listopada 2015 przez Wilier Bywalec (2,570 p.)
dzięki, wszystko jasne
0 głosów
odpowiedź 7 listopada 2015 przez niezalogowany

Prawdziwa wielkość wektora nie jest równa size(), w momencie tworzenia rezerwuje więcej pamięci, aby push_back działał szybciej, prawdziwa wielkość wektora jest zwracana po użyciu capacity() stąd jest różnica pomiędzy ilością obiektów na jakie ma zarezerwowane pamięc, a ilością obiektów przechowywaną aktualnie w wektorze

Podobne pytania

0 głosów
1 odpowiedź 751 wizyt
pytanie zadane 24 kwietnia 2022 w C i C++ przez Mavimix Dyskutant (8,390 p.)
0 głosów
1 odpowiedź 107 wizyt
pytanie zadane 26 grudnia 2016 w C i C++ przez PryPry Nowicjusz (160 p.)
0 głosów
1 odpowiedź 364 wizyt

92,568 zapytań

141,422 odpowiedzi

319,629 komentarzy

61,956 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...