TS: Memory Stack und Heap

Beitrag lesen

Hello,

Stimmt das so?

fast

Heap und Stack werden beim Start des Programms jedem Thread des Programms zugeordnet und sind Teil des virtuellen Speichers.

Stack:

  • die Belegung des Stacks wächst und schrumpft während des Programmablaufs,

Stichworte: push und pop, Sicherung der Segmentregister bei einem (Far-)Call, Rücksicherung durch (Far-)Return

  • der Stack hat eine feste Größe

Einstellbar. Er wird von oben nach unten belegt, also von Stacksize bis 0

  • ist etwas schneller als der Heap

Das liegt daran, dass es für die Belegung/Rückholung eigene Befehle gibt (push, pop)

  • wird eine Variable im scope initialisiert löscht sich diese beim verlassen des scopes wieder vom stack ohne dass man etwas dafür tun muss

fast falsch aber auch ein bisschen richtig. Der alte Stackpointer wird gemerkt und beim Return (nach wiederherstellung der Register ...) wiederhergestellt.

Das ist jetzt nur das einfache Modell. Durch Protected Mode, Speicherverwaltungsroutinen (Garbage Controller, ...) wird es wesentlich komplexer und ist "zu Fuß" eigentlich nicht mehr zu handhaben.

Heap:

  • für jedes neue Objekt das zb mit new angelegt wird wird hier ein speicher reserviert
  • der heap hat eine variable größe

Das kommt auf Prozessor, Betriebssystem und auf das Programmiersystem an. Im Prinzip ja. Stichworte Local- und Global-Descriptor Tables

  • Objekte die im Heap liegen müssen explizite gelöscht werden,

Freigegeben. Bei modernen Programmiersprachen müssen nur die Referenzen auf das Hauptobjekt freigegeben werden. Wenn keine mehr besteht, kümmert sich die Speicherverwaltung um den Rest bezüglich der untergeordneten Referenzen.

Liebe Grüße
Tom S.

--
Es gibt nichts Gutes, außer man tut es!
Das Leben selbst ist der Sinn.