Du befindest dich hier: FSI Informatik » Prüfungsfragen und Altklausuren » Hauptstudiumsprüfungen » Lehrstuhl 2 » Uebersetzerbau 3
Uebersetzerbau 3
Prüfer: Prof. Dr. Michael Philippsen, Dipl.-Inf. Stefan Kempf
Syntax: Frage? (Meine) Antwort
Anmerkung: Hab viel selbst erzaehlt da Prof. Dr. Philippsen das so gerne sieht(?)
Gedaechtnis-Protokoll
Fragen kamen nur von Stefan. Er hat auch nur Fragen zum Praktikum und den Teilen der Vorlesung gestellt die er selbst gehalten hat.
- Byte-Code:
int foo(int a){ add tmp, a, 1 return tmp; } int main(){ ... // hier standen Anweisungen push y call z, foo() ... // noch mehr sinnlose Anweisungen }
- Was macht ein Interpreter damit?
- Wie sieht der Aufruf von foo() aus? Interpreter ruft sich selbst rekursive Aufruft oder macht direkte Sprung im Byte-Code.
- Was macht der JIT?
- Ohne Optimierung Das ganz normale 1:1 Codeerzeugen erklaert.
- JIT2 = Registervergabe mittels Linear Scan
- Algorithmus an einfachem Beispiel (nur gegebenen Lebensspannen) auf Papier vorfuehren. Davor hab ich selbst noch erklaert wie man die Lebenspannen korrekt berechnet, etc.
- Dann JIT3: foo() in main inlininen
- Wann sollte man JITen? Laufzeitmessung: Zaehler vs Stichproben
- Zwischen drinnen kam noch eine Frage zu was passiert wenn man aus Interpretiertem Code gejiteten Code aufrufen will oder umgekehrt. Trampolin Funktion. System vs Interpreter Stack. On-Stack-Replacement (Die genaue chronologische Einordnung in den obigen Block ist mir leider entfallen.)
- Exceptions
- Warum?
- Wie? dynamisches Registrieren vs statische Tabellen (kurz umrissen)
- Was ist zur Laufzeit besser? statische Tabellen
- Linker und Loader:
- Dynamic shared Library
- Wie muss der Code beschaffen sein? PIC
- Was passiert wenn man foo() der Library aufruft? PLT: Erst steht dort die Adresse des Stubs der dann die richtige Adresse berechnet und in die PLT eintraegt (und dann noch foo() aufruft).
- Wie koennte man fuer Daten auch Lazy-relocation implementieren? ?
Alles in allem lockerer Pruefung. Gerne wieder.