Seite 1 von 1

Speicherlayout: Datensegment vs Heap

Verfasst: 10. Nov 2007 13:06
von citta
Knackpunkt ist folgender Satz:
Sie könnten etwa einen großen, kontinuierlichen Speicherbereich auf dem Heap mithilfe des MARS-Kommandos .space reservieren und diesen der Reihe nach mit Daten füllen.
Und da ich das ohnehin nie verstanden habe, kommt meine Frage: In der Aufgabe wird anscheinend Heap und Datensegment synonym verwendet. Ich dachte, das sind zwei verschiedene Sachen.

Ich benutze ja .space um eine fixe Anzahl an Speicher zu reservieren und das unter .data, also im Datensegment. Das ist nach meiner Interpretation der "Read/write data"-Bereich in der Illustration auf der Folie Kap. 2/25. Diese liegt unter dem Heap und über dem Code. Ich dachte, der Heap wäre doch drüber, und wird dynamisch mit dem Syscall sbrk allokiert? So zeigt mir MARS, dass das Datensegment bei 0x10010000 anfängt und der Heap bei 0x10040000, also zwei verschiedene Bereiche sind.

Den Heap zu verwenden hätte in der Aufgabe dann den Vorteil, dass man nicht einen großen Bereich im Datensegment reservieren muss, den man oft gar nicht verwendet.

Bezeichnet Heap also die Daten unter .data oder nicht? Oder habe ich alles völlig falsch verstanden?

Falls meine Interpretation stimmt: Gibt es für die Aufgabe einen Nachteil den Heap zu verwenden bzw. muss man was beachten? Wie kann man Speicher im Heap wieder freigeben, wie man das auch C/C++ kennt (free/delete)?

Verfasst: 10. Nov 2007 18:01
von m0ep
Für mich sind Heap und Datensegment nicht das selbe.

Auf den Heap kann ich mir (wie in C/C++) Speicher zur Laufzeit reserviern.
Im MIPS kann man das mit dem Syscall 9 (freigeben kann man den anscheinend nicht :/)

Im Datensegment lege ich mir beim programmieren einen Speicherbereich an -> .space, ....


Also denke ich mal die meinen das Datensegment.


Ich denke mal einen Nachteil durch den Heap bekommt man hier nicht ... man muss sich halt selber um das anlegen des Speichers kümmern.