F: Was haben wir im Praktikum gemacht?
F: Warum Bytecode?
F: Wie funktioniert ein Interpreter?
F: Wie kann man es besser machen?
Indirekt durchgefädelte Interpretation
Instruktionsroutinen springen nicht zurück, sondern springen nächste Instruktion direkt an
F: Noch bessere Variante?
Direkt durchgefädelte/vorübersetzte Interpretation
Vorübersetzungsschritt erzeugt Array mit Funktionspointern, die hintereinander ausgeführt werden und die Instruktionsroutinen anspringen
Anmerkung: Gibt noch eine (nicht in der Vorlesung besprochene Variante), bei der der Code zum Aufruf der Funktionen direkt als Maschinencode in der Tabelle steht (vergleiche auch PLT)
F: Was macht JIT1?
F: Was braucht die Trampolinfunktion alles?
Ist aufgerufene Funktion schon kompiliert? Soll sie interpretiert werden?
Aufruf der Funktion mit richtigen Parametern
Rückgabe des von der aufgerufenen Funktion zurückgegebenen Returnwertes
F: Was macht JIT2?
F: Verbesserungen?
F: Verbesserungen?
F: Was macht JIT3?
Inlining
Welche Jumps wie anzupassen sind (vor geinlinter, in geinlinter, nach geinlinter Funktion, returns, calls, Offsets)
F: Linker & Loader: Was macht ein einfacher Linker?
Relokation
Compiler produziert Assembler mit „Verweisen“
Assembler produziert Maschinencode mit Dummyverweisen (0x0) und Relokationstabelle
Linker schreibt korrekte Adressen hinein
F: Welche Teile hat eine Objektdatei (Eingabe des Linkers)?
Symboltabelle
Text
Daten
Debuggininformationen
Relokationstabelle
F: Warum extra Datensegment?
Will man nicht ausführen können
Hilfreich für dynamische Bibliotheken
noch gezeigt, wie mehrere Objectfiles gelinkt werden
F: Gemeine Frage: Was ist ein Modell, was ein Metamodell
Domäne: Problembereich (Menge aller C Programme)
Modell: formale Beschreibung einer Probleminstanz (C Programm)
Metamodell: formale Beschreibung des Problembereiches (C Spezifikation)
F: Speicherverwaltung: Was machen malloc und free?
Freispeicherliste auf Heap (Heap mit mmap/brk)
Unterschiedliche Sortiervarianten (nicht sortiert, nach Adresse, nach Größe, …)
F Warum muss man zum Mergen benachbarter Freispeicherelemente nicht unbedingt nach Adresse sortieren?
F: Was kann man noch machen?