Im Grunde gibt es da mehrere Bereiche, die man aber in drei "große" Sektionen trennen kann.
1. Statische Variablen, die du im Programm deklarierst (z.B. mit globalen
var Statements), liegen im globalen Datenbereich.
2. Dynamische Variablen, die du während der Laufzeit alloziierst (wie z.B. TObject.Create) liegen auf dem Heap.
3. Lokale Variablen, die du innerhalb von Prozeduren verwendest, liegen auf dem Stack.
Gründe:
für 3 - die Variablen muss es mehrfach geben können wg. Rekursion.
für 2 - die Größe der Variablen steht zur Compilezeit noch nicht wirklich fest.
Dabei musst du allerdings unterscheiden, dass z.B. bei
die Variable
Form1 im statischen Datenbereich liegt, der
Inhalt jedoch auf dem Heap (weil er dynamisch alloziiert wird).
// EDIT: Nix roter Kasten?!?