PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : std::vector Reihenfolge sicher


Gast
2008-04-02, 16:14:30
Hi, eigentlich brauche ich einen zusammenhängenden Speicherbereich von Bytes (unsigned char[]), würde aber gerne einige Features eines std::vectors nutzen. Aber man soll sich ja nicht darauf verlassen können, daß der Speicher zusammenhängend bleibt, oder lediglich bloß nicht an der gleichen Stelle im Speicher, aber schon zusammenhängend?

Ich brauche nicht immer zusammenhängenden Speicher, aber an einem Punkt müßte ich sagen "der Reihe nach". Kann ich irgendwie sicherstellen, ob die Elemente im Speicher gerade zusammenhängen oder kann man das erzwingen? Oder ist es gar nicht nötig, weil sie immer in einem Block zusammenhängen nur nicht immer an der gleichen Stelle? Aber wenn ich mir den ganzen Block verarbeiten lassen muß, sind alle da?

Trap
2008-04-02, 16:45:35
Die fehlende Forderung des Zusammenhangs ist ein Bug im Standard, in der nächsten Version wird das gefordert und es gibt meines Wissens nach keinen Compiler der einen nicht zusammenhängende std::vector hat.

Gnafoo
2008-04-02, 17:20:18
Wobei zu beachten ist, dass sich die Adressen der Elemente meines Wissens nach ändern können. Nämlich genau dann, wenn ein größeres (oder kleineres) Basis-Array initialisiert wird, weil die Grenzen des alten erreicht wurden und dabei die alten Daten in das neue Array kopiert werden. Man hat also keine Referenzielle Integrität.

Edit: ich sollte genauer lesen. Hab gerade gemerkt, dass der TS das schon erwähnt hat.

Ectoplasma
2008-04-03, 01:06:25
Oder ist es gar nicht nötig, weil sie immer in einem Block zusammenhängen nur nicht immer an der gleichen Stelle?

Ich kenne keine STL-Implementierung, bei der der Speicher im Falle eines Vectors nicht zusammenhängend wäre.

Die Basisadresse des Speichers im Vector kann sich ändern, richtig. Eine Implementierung für eine feste Basisadresse, wäre auch gar nicht möglich in C++. Diese ändert sich spätestens dann, wenn der Speicher größer werden muss, als der vorallozierte Speicher. Oder noch genauer, wenn realloc (damit arbeiten ein paar STL Implementierungen) es nicht mehr schafft einen zusammenhängenden Speicherbereich ausgehen von einer Basisadresse aus zu finden.

Coda
2008-04-03, 03:12:10
Die fehlende Forderung des Zusammenhangs ist ein Bug im Standard, in der nächsten Version wird das gefordert und es gibt meines Wissens nach keinen Compiler der einen nicht zusammenhängende std::vector hat.
Ist es nicht so, dass die Anforderungen an die Laufzeit praktisch indirekt fordern, dass es zusammenhängend sein muss?

Trap
2008-04-03, 05:56:22
Ist es nicht so, dass die Anforderungen an die Laufzeit praktisch indirekt fordern, dass es zusammenhängend sein muss?
Das haben sich die Schreiber des Standard wohl auch gedacht, aber http://citeseer.ist.psu.edu/brodnik99resizable.html erfüllt auch alle Anforderungen und ist nicht zusammenhängend.

Coda
2008-04-03, 12:33:18
Sehr interessantes Paper, danke.