Fragen kamen nur von Stefan. Er hat auch nur Fragen zum Praktikum und den Teilen der Vorlesung gestellt die er selbst gehalten hat.
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
Dann JIT3: foo() in main inlininen
Wann sollte man JITen? Laufzeitmessung: Zaehler vs Stichproben
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.