Hallo!
Ich habe eine kurze Frage zur Speicherverwaltung.
Wenn ich eine vector array im Heap erstelle und an verschiedenen Indexen daten per push_back einfüge, wie groß ist der tatsächliche Speicherverbrauch?
Beispielcode:
vector \*v = new vector[10];
v[1].push\_back(3);
v[1].push\_back(8);
v[5].push\_back(88);
Die funktion sizeof() gibt mir in diesem Fall für den Pointer *v eine Größe von 4 aus - aber für jedes einzelne v[i] eine Größe von 12.
Wird dort die gesammte Größe des Vektorarrays angezeigt oder wird jedes Element der maximalen Größe nach aufgebläht?
Ich hoffe, ich habe mich einigermaßen verständlich ausgedrückt 
Grüße
Björn
Hallo
Wenn ich eine vector array im Heap erstelle und an
verschiedenen Indexen daten per push_back einfüge, wie groß
ist der tatsächliche Speicherverbrauch?
vector *v = new vector[10];
v[1].push_back(3);
v[1].push_back(8);
v[5].push_back(88);
Die funktion sizeof() gibt mir in diesem Fall für den Pointer
*v eine Größe von 4 aus - aber für jedes einzelne v[i] eine
Größe von 12.
Du bastelst Dir hier ein 2-dimensionales Array, die
erste Dimension v[…] erzeugst Du mit ‚new‘ und gibst
10 Elemente vor, v ist der Anfang dieses 10-elementigen
Blocks (Zeiger sind immer 4 bytes in 32bit-Systemen).
‚new‘ erzeugt für jeden Einzelnen dieser vector’s
einen Block von sizeof(v[i]) hintereinander.
Jedes v[i] ist dann der Startpunkt der 2. Dimension
v[i][j], hier benutzt Du den vector-eigenen
Allokationsmechanismus, der hinter push_back
arbeitet. Jede Spalte der 2. Dimension hat die
Größe vector[i].capacity(), die Größenformel
wäre also:
größe = 0
FOR(i=0 BIS 10)
größe += sizeof( v[i] ) + v[i].capacity() \* sizeof(int)
Grüße
Das Ganze hättest Du auch mit
vector \>vv;
vv.resize(10);
vv[1].push\_back(3);
vv[1].push\_back(8);
vv[5].push\_back(88);
haben können.
CMБ