Netbek
19.11.2004, 23:56
Naja, ich wüsste nicht wie und denke auch nicht, dass es geht.
Will nur mal sicher gehen. Mann kann ja in C++ dynamischen Speicher reservieren(heap?).
Wenn das Programm dann aber plötzlich "merkt", dass ein Speicherbereich nicht ausreicht und daher noch mehr Speicher benötigt, dann muss ich doch eigentlich erneut grösseren Speicher reservieren und das Array, das auf dem unzureichenden Speicherbereich liegt in den neuen Bereich kopieren und kann nicht etwa die grösse des reservierten bereiches ändern. So wird es doch bei strings gelöst, oder?
Es erscheint mir auch logischer, weil das Betriebssystem ja dann das Speichermanagement komisch regeln müsste -> Es könnten nicht verschiedene speicherbereiche direkt hintereinander reserviert werden.
zB.
string fisch="lol";
string lalala="njam";
fisch+=lalala;
die beiden string haben irgendwo jeweils n char array bzw. n pointer drauf.
jetzt wird doch über die methode += nen neues char array erstellt bzw. speicher reserviert wo dann der inhalt von beiden anderen arrays nacheinander reinkopiert wird.
Dann wird der Speicher des alten arrays in fisch wieder freigegeben und der pointer, der auf das alte array zeigte, zeigt nun auf das neue array.
Hab' ich in etwa recht?
edit: ich könnte mir auch vorstellen, dass quasi ein array von pointern erstellt wird, welche auf die einzelnen char array fragmente, die entstehen, zeigen. Hielt' ich zumindest für ne geschickte lösung, unter umständen.
Will nur mal sicher gehen. Mann kann ja in C++ dynamischen Speicher reservieren(heap?).
Wenn das Programm dann aber plötzlich "merkt", dass ein Speicherbereich nicht ausreicht und daher noch mehr Speicher benötigt, dann muss ich doch eigentlich erneut grösseren Speicher reservieren und das Array, das auf dem unzureichenden Speicherbereich liegt in den neuen Bereich kopieren und kann nicht etwa die grösse des reservierten bereiches ändern. So wird es doch bei strings gelöst, oder?
Es erscheint mir auch logischer, weil das Betriebssystem ja dann das Speichermanagement komisch regeln müsste -> Es könnten nicht verschiedene speicherbereiche direkt hintereinander reserviert werden.
zB.
string fisch="lol";
string lalala="njam";
fisch+=lalala;
die beiden string haben irgendwo jeweils n char array bzw. n pointer drauf.
jetzt wird doch über die methode += nen neues char array erstellt bzw. speicher reserviert wo dann der inhalt von beiden anderen arrays nacheinander reinkopiert wird.
Dann wird der Speicher des alten arrays in fisch wieder freigegeben und der pointer, der auf das alte array zeigte, zeigt nun auf das neue array.
Hab' ich in etwa recht?
edit: ich könnte mir auch vorstellen, dass quasi ein array von pointern erstellt wird, welche auf die einzelnen char array fragmente, die entstehen, zeigen. Hielt' ich zumindest für ne geschickte lösung, unter umständen.