Kurz erklärt
Stack und Heap sind die beiden Speicherbereiche eines Programms: Der Stack verwaltet Funktionsaufrufe und lokale Variablen automatisch und schnell, der Heap dynamisch angeforderte Daten mit flexibler Lebensdauer.
Genauer
Beim Aufruf einer Funktion legt das Programm auf dem Stack einen Rahmen (*Stack Frame*) mit Parametern, lokalen Variablen und Rücksprungadresse an; beim Verlassen wird er automatisch entfernt. Daten, die länger leben sollen oder deren Größe erst zur Laufzeit feststeht, liegen auf dem Heap – dort verwaltet sie der Programmierer (C/C++) oder ein Garbage Collector.