Mittwoch, 6. April 2011

 

Aufrufstack (Call Stack) (POS1: 2A, 2C)

Jede Laufzeitumgebung eines Programms muss beim Aufruf von Funktionen oder Methoden folgende Informationen verwalten:
Die Objektreferenz wird nur für objektorientierte Sprachen benötigt. Sie ist meist versteckt. In Python muss sie beim Erstellen der Klasse explizit angegeben werden (self). Bei einem Aufruf objekt.methode(...) wird intern dann etwas wie methode(objekt, ...) erzeugt (... stellt die Parameter der Methode dar).
Oben genannte Informationen werden auf einem Stack abgelegt, dem Aufrufstack oder Call Stack. Je nach Implementierung können noch weitere Informationen dazukommen.
Beispiele zur Darstellung finden Sie hier: Aufrufstack und Lösung zum Aufrufstack (dieses Beispiel verwendet praktisch keine Objektreferenzen, d.h. Objekte werden nicht dargestellt).

Im Folgenden finden Sie ein einfaches Beispiel mit zwei Klassen:
public class Bar {
    private Foo[] bars = new Foo[2];
    private int n = 0;
    public static void main(String[] args) {
        Bar o = new Bar();
        for (int i = 0; i < 6; i++) {
            Foo m = new Foo("" + i);
            o.add(m);
        }
    }
    public void add(Foo m) {
        bars[n] = m;
        n++;
        if (n == bars.length) {
            for (int i = 0; i < bars.length; i++) {
                System.out.println(bars[i].getName());
            }
        }
    }
}
public class Foo {
    private String name;
    public Foo() {
        this("no name");
    }
    public Foo(String name) {
        this.name = name;
    }
    public String getName() {
        return "Foo [name=" + name + "]";
    }
}
Die Aufgabenstellung wäre: zeichnen Sie den Aufrufstack und den Heap, wenn das Programm die Zeile 10 in der Klasse Foo erreicht. Das Programm soll dabei mit folgendem Aufruf gestartet worden sein: java Bar test
Bei der folgenden Darstellung werden Strings wie primitive Werte dargestellt, also direkt bei der Variable. Richtigerweise sind Strings aber Objekte.
Die Darstellung zeigt den Speicher schematisch für die Zeilen Bar:8, Bar:14 und die gesuchte Zeile Foo:10.

Auf das Bild Klicken für weiteres Bild...

Labels: ,


Kommentare:

Kommentar veröffentlichen

Abonnieren Kommentare zum Post [Atom]





<< Startseite

This page is powered by Blogger. Isn't yours?

Abonnieren Posts [Atom]