Speichernutzungsverhalten von STL-Vector und Konsorten
-
asc schrieb:
dgrat schrieb:
das hat mich auch nicht sonderlich verwundert, da ich generell von std::vector nicht viel halte.
Wundert mich nicht, wenn jemand gegen die Implementierung statt gegen die Schnittstelle programmiert.
zynismus ist die sprache schwacher geister.. vermutlich weiste selbser bicht, warum der fehler auftritt.
aber volkard hat wieder recht, in meinem fall bewirkt vector<vector> eine speicherfragmentierung, weil die daten, die wichtig behandelt werden, leider nicht hintereinanderliegen...
-
dgrat schrieb:
zynismus ist die sprache schwacher geister..
Naja, es ist ein wenig einfach, dem
vectormal grundsätzlich die Schuld in die Schuhe zu schieben, weil man persönliche (wahrscheinlich noch unbegründete) Abneigungen besitzt.dgrat schrieb:
aber volkard hat wieder recht, in meinem fall bewirkt vector<vector> eine speicherfragmentierung, weil die daten, die wichtig behandelt werden, leider nicht hintereinanderliegen...
Dann benutzt du eben nicht
memcpy(). Sobald nämlich mehr als nur PODs vorliegen, erzielst du damit undefiniertes Verhalten.Und dass ein verschachtelter
std::vectornicht alle Elemente linear hintereinander im Speicher halten kann, dürfte zu erwarten sein. Entweder man kopiert die inneren Container einzeln oder benutzt einen anderen Aufbau der Datenstruktur (eindimensionalerstd::vector).
-
dgrat schrieb:
vermutlich weiste selbser bicht, warum der fehler auftritt.
Mein Persönlicher Verdacht wurde bereits im 2ten Post geäußert, zudem habe ich schon selbst genügend Fehler in Programmen gebaut um auch das Verhalten durchaus zu kennen. Die Ablehnung wiederum vom std::vector, und das zurückgreifen wollen auf eine selbstgebaute Lösung die auf das gleiche hinausläuft ist mehr als Schwachsinn.
Die Macher der Standardbibliothek haben sich schon gute Gedanken gemacht (Und ich behaupte mal das man die Standardbibliothek, gerade bei aktuellen Compilern weitgehend Fehlerfrei bezeichnen kann - vermutlich besser getestet als du es jemals in eigenen Programmteilen hinbekommen wirst).
Es gibt sicherlich auch Punkte die man daran aussetzen kann, aber das was du mit memcpy betreibst funktioniert auch mit C-Arrays nicht (Zumindestens nicht mit vielen Objekttypen).
Und das du mein Abgewandeltes Zitat nicht kennst und darauf auf einen "schwachen Geist" schließt, zeigt mir nur das du nicht wirklich viele Fachbücher kennst, die sich auch mit OO und C++ auseinander setzen ("Programmiere gegen die Schnittstelle, und nicht gegen die Implementierung" ist nicht ohne Grund einer der häufigsten Zitate die ich aus Fachbüchern kenne).
cu André