dynamisch speicher reservieren



  • Hallo,

    gibt es einen anderen Vorteil für dynamische Speicherreservierung neben dem Argument dass bei sehr großen Feldern der stack zu sehr belastet wird ?

    Wenn ich char * ptr = new char[100] ; anfordere und ich stelle später fest ich brauche ein größeres Feld z.b. new char [200] dann muss ich doch zuerst die Daten in ein temporäres array kopieren , dann mein neues Feld anfordern und später das Feld char[100] mit delete löschen ?

    Ich kann nicht einfach an das bestehende Feld anhängen oder ?

    Danke



  • blurry333 schrieb:

    gibt es einen anderen Vorteil für dynamische Speicherreservierung neben dem Argument dass bei sehr großen Feldern der stack zu sehr belastet wird ?

    Das hab ich noch nie gehört. Es geht dabei eher darum das man oft genug einfahc nicht wies wieviel Platz am Ende nötig ist, und wenn mans nicht weis fällt der Stack schonmal aus.

    blurry333 schrieb:

    Wenn ich char * ptr = new char[100] ; anfordere und ich stelle später fest ich brauche ein größeres Feld z.b. new char [200] dann muss ich doch zuerst die Daten in ein temporäres array kopieren , dann mein neues Feld anfordern und später das Feld char[100] mit delete löschen ?

    Naja fast. Du forderst den neuen Speicher an und kopierst dann den alten in den neuen, da ist nichts mit Temporärem Array, das wäre ja doppelt gemoppelt. das Alte wird dann gelöscht und das Neue zugewiesen.

    blurry333 schrieb:

    Ich kann nicht einfach an das bestehende Feld anhängen oder ?

    Ne das geht nicht.



  • blurry333 schrieb:

    gibt es einen anderen Vorteil für dynamische Speicherreservierung neben dem Argument dass bei sehr großen Feldern der stack zu sehr belastet wird ?

    Zur Kompilierzeit kann man nicht immer sagen, welche Objekte angelegt werden sollen (z.B. bei dynamischen Arrays oder Polymorphie). Dafür braucht man den "Heap" (dynamischen Speicherbereich).

    blurry333 schrieb:

    Wenn ich char * ptr = new char[100] ; anfordere und ich stelle später fest ich brauche ein größeres Feld z.b. new char [200] dann muss ich doch zuerst die Daten in ein temporäres array kopieren , dann mein neues Feld anfordern und später das Feld char[100] mit delete löschen ?

    Wieso in ein temporäres Array? Neues Feld anlegen, Werte kopieren, altes Feld löschen.

    Aber da du C++ programmierst, kannst du die STL-Container nutzen. Dann kannst du komfortabel Elemente anhängen oder löschen, ohne dir um die Speicherverwaltung gedanken zu machen.

    blurry333 schrieb:

    Ich kann nicht einfach an das bestehende Feld anhängen oder ?

    Nein, nicht direkt. In C gibt es zwar realloc() , aber da ist auch nicht garantiert, dass das bestehende Feld vergrössert werden kann. Aber eben, mit den Containern kannst du einfach so anhängen.



  • Dynamische Speicheranforderung verwendet man ganz einfach dann, wenn man sie verwenden muss.
    Wenn ein Objekt den Scope überleben muss, in dem es erzeugt wird, muss man es dynamisch anlegen.
    Wenn ein Objekt "zu gross" wird, muss man es dynamisch anlegen.
    Wenn man Arrays variabler Grösse braucht genauso.

    Alles andere kann und sollte man IMO auf dem Stack anlegen.


Anmelden zum Antworten