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.