faecher:informatik:oberstufe:algorithmen:rekursion:programmaufrufstack:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Nächste Überarbeitung
Vorherige Überarbeitung
Letzte ÜberarbeitungBeide Seiten, nächste Überarbeitung
faecher:informatik:oberstufe:algorithmen:rekursion:programmaufrufstack:start [13.01.2022 08:59] – angelegt sbelfaecher:informatik:oberstufe:algorithmen:rekursion:programmaufrufstack:start [13.01.2022 12:39] sbel
Zeile 1: Zeile 1:
 ====== Der Programmaufrufstack ====== ====== Der Programmaufrufstack ======
  
 +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:
 +
 +<code java>
 +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!");
 +    }
 +
 +}
 +</code>
 +
 +Beim Aufruf des Konstruktors werden also zwei weitere Methoden, also "Unterprogramme", aufgerufen, der Ablauf sieht etwa wie folgt aus.
 +
 +{{ :faecher:informatik:oberstufe:algorithmen:rekursion:programmaufrufstack:stack01.drawio.png |}}
 +
 +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.
 +
 +^ Was passiert                                                                                                                ^ Wie sieht der Stack aus?  ^
 +|\\ ||
 +| Der Konstruktor wird mit dem Argument ''name'' aufgerufen.\\ Auf dem Stack wird Speicher für den \\ Konstruktoraufruf reserviert. Es gibt keine Rücksprungadresse |          {{ :faecher:informatik:oberstufe:algorithmen:rekursion:programmaufrufstack:stack001.drawio.png |}}                 |
 +|\\ ||
 +| Aus dem Konstruktor heraus wird die Methode ''GruessGott'' mit dem\\ Argument ''name'' aufgerufen.\\ Die Stelle für die Rückkehr nach Bearbeitung von ''GruessGott'' wird vermerkt.| {{ :faecher:informatik:oberstufe:algorithmen:rekursion:programmaufrufstack:stack002.drawio.png |}}                 |
 +|\\ ||
 +| Die Bearbeitung von ''GruessGott'' ist beendet.\\ Der zugehörige Speicherbereich im Call-Stack wird freigegeben.\\ Im Konstruktor wird die Verabschiedung angekündigt.  | {{ :faecher:informatik:oberstufe:algorithmen:rekursion:programmaufrufstack:stack001.drawio.png |}}                 |
 +|\\ ||
 +| Aus dem Konstruktor heraus wird die Methode ''AufWiedersehen'' aufgerufen.\\ Keine Argumente, Rücksprungadresse wird vermerkt. | {{ :faecher:informatik:oberstufe:algorithmen:rekursion:programmaufrufstack:stack003.drawio.png |}}                 |
 +|\\ ||
 +| Der erste Aufruf von ''AufWiedersehen'' ist beendet.\\ Der Programmablauf kehrt zum Konstruktor zurück. | {{ .:stack001.drawio.png |}}                 |
 +|\\ ||
 +| Aus dem Konstruktor heraus wird die Methode ''AufWiedersehen'' erneut aufgerufen.\\ Keine Argumente, Die **neue** Rücksprungadresse wird vermerkt. | {{ :faecher:informatik:oberstufe:algorithmen:rekursion:programmaufrufstack:stack004.drawio.png |}}                 |
 +|\\ ||
 +| Der zweite Aufruf von ''AufWiedersehen'' ist beendet.\\ Der Programmablauf kehrt zum Konstruktor zurück. | {{ .:stack001.drawio.png |}}                 |
 +|\\ ||
 +|Der Konstruktoraufruf ist beendet.\\ Der Call-Stack ist leer. | {{ .:stack000.drawio.png |}}                 |
 +
 +----
 +{{:aufgabe.png?nolink  |}}
 +=== (A1)  === 
 +
 +Welche Informationen kannst du den folgenden Darstellungen des Programmaufrufstacks entnehmen? Welche Informationen kannst du den Darstellungen des Stacks nicht entnehmen?
 +
 +{{ :faecher:informatik:oberstufe:algorithmen:rekursion:programmaufrufstack:stack02.drawio.png |}}
 +
 +---- 
 +
 +{{ :faecher:informatik:oberstufe:algorithmen:rekursion:programmaufrufstack:stack03.drawio.png |}}
  • faecher/informatik/oberstufe/algorithmen/rekursion/programmaufrufstack/start.txt
  • Zuletzt geändert: 13.01.2022 12:40
  • von sbel