%% -*- mode: latex; TeX-master: "compilerbau.tex"; -*-

\begin{slide}{Frames - Definition}

Frame (Rahmen, Aktivationsverband) 

ist Speicherbereich
zur Verwaltung eines Unterprogramm-Aufrufs.
Bestandteile sind:

\begin{itemize}
\item Platz für Argumente
\item Platz für lokale Variablen
\item (bei JVM) Operand Stack für lokale Rechnungen

  beachte: Größe steht zur Compile-Zeit fest
\item Rückkehr-Information
\item \dots
\end{itemize}

\end{slide}

\begin{slide}{Frames - Benutzung}

  \begin{itemize}
  \item 
Zu jedem Zeitpunkt gibt es (für jeden Thread)
einen \emph{aktuellen} Frame.
\item
Bei Unterprogramm-Aufruf legt der 
Aufrufer (caller) einen neuen Frame an
und schreibt die Werte der Parameter hinein
sowie einen Verweis auf den Caller-Frame
($=$ dynamischer Vorgänger).

Dann wechselt die Ausführung zum 
Aufgerufenen (callee).
\item
Wenn der fertig ist, wieder zurück zum Frame
des Aufrufers (dynamischer Link wird benutzt). 
  \end{itemize}

\end{slide}

\begin{slide}{Frames - Beispiel}

\begin{verbatim}
void p(int x) {
    int y = 3;
    printf ("%d\n", x+y);
}
void q(int x) {
    p(x);
    p(x+1);
}
int main () {
    int y = 4; q(y+1);
}
\end{verbatim}
  
\end{slide}
