Unter dem (Programm)Aufrufstapel (englisch call stack, procedure stack) versteht man einen besonders genutzten Stapelspeicher, der zur Laufzeit eines Programms den Zustand der gerade aufgerufenen Unterprogramme enthält.
Was bedeutet das? Wir betrachten ein Beispiel:
public class Hallo { public Hallo(String name) { System.out.println("Hallo " + name + "!"); GruessGott(name); System.out.println("Ich glaube, gleich verabschiede ich mich..."); AufWiedersehen(); AufWiedersehen(); } public void GruessGott(String name) { System.out.println("Grueß Gott, " + name + "!"); } public void AufWiedersehen() { System.out.println("Ciao!"); } }
Beim Aufruf des Konstruktors werden also zwei weitere Methoden, also "Unterprogramme", aufgerufen, der Ablauf sieht etwa wie folgt aus.
Dabei fällt auf, dass der Programmablauf nach jedem Aufruf eines Unterprogramms zu der Stelle zurückkehren muss, von der dieses aufgerufen wurde. Das wird dadurch realisiert, dass beim Aufruf einer Methode/Funktion auf dem Programmaufrufstack für jede Methode ein Speicherbereich reserviert wird, in dem alle relevanten Infos festgehalten werden, unter anderem auch die Rücksprungadresse, also die Stelle, von der aus die Methode gestartet wurde.