Files
2025-07-07 19:57:44 +02:00

2.7 KiB
Raw Permalink Blame History

📘 Zusammenfassung: VA Compiler Computerarchitektur


🔄 Vom Quellcode zum ausführbaren Programm

  • Compiler-Toolchain:

    • Übersetzt Hochsprache in Maschinencode

    • Tools: GCC, Clang, MSVC, Intel Compiler

    • Ergebnis: ausführbare Datei (PE, ELF, Mach-O)

  • Loader (Betriebssystem):

    • Lädt die Datei in den Speicher & startet die Ausführung

🧱 Phasen des Compilers

Phase Aufgabe
Lexikalische Analyse Zerlegt Quelltext in Tokens: <Tokenname, Attributwert>
Syntaktische Analyse Erzeugt Syntaxbaum (AST) aus Tokens
Semantische Analyse Prüft Typen, ergänzt Typkonvertierungen, Symboltabelle wird erweitert
Zwischencode-Gen. Erzeugt maschinenunabhängigen Zwischencode (z.B. 3-Adress-Code)
Optimierung Vereinfachung & Effizienzsteigerung (lokal/global, konstante Faltung, tote Code-Elimination)
Codegenerator Übersetzt in Zielmaschinencode, Register- und Speicherzuweisung

🔥 Optimierungstechniken

🏃 Lokale Optimierungen (Basisblock)

  • Gemeinsame Teilausdrücke eliminieren

  • Toten Code entfernen

  • Registernutzung reduzieren (Operandenumordnung)

  • Kostenreduktion: Multiplikation → Addition ersetzen

🌎 Globale Optimierungen

  • Registerzuteilung über mehrere Basisblöcke hinweg

  • Schleifeninvariante Codebewegung

  • Induktionsvariablen optimieren (i++ statt i = i+1)

📝 Beispiel (3-Adress-Code)

t1 = id3 * 60.0
id1 = id2 + t1

🌳 Flussgraph & DAG

  • Grundblöcke: Sequenzen ohne Sprünge

  • Flussgraph: zeigt Steuerfluss zwischen Grundblöcken

  • DAG (Directed Acyclic Graph): erkennt gemeinsame Teilausdrücke


🔗 Binden & Laden

  • Relokation: Anpassung der Adressen bei Modulzusammenführung

  • Dynamisches Binden:

    • Windows: DLLs (Dynamic Link Libraries)

    • Unix: Shared Objects (.so)

    • MULTICS: Prozeduradresse erst beim ersten Aufruf zugewiesen


⚙️ Compiler Tools

Tool Aufgabe
cc -E Preprocessing (Makros expandieren)
cc -S Erzeugt Assembler-Code
cc -c Erzeugt Objektcode
cc -o Linkt Objektcode zu ausführbarer Datei

📚 Literatur

  • Dragon Book: Compilers: Principles, Techniques, and Tools (Aho, Sethi, Ullman, Lam)

  • Wirth: Compilerbau


📝 Für die Klausur merken

Compiler-Phasen & deren Aufgaben
Unterschied Inline Assembler ↔ Compiler
Optimierungen: lokal (Basisblock), global (Flussgraph)
DAG & Flussgraph: Aufbau und Nutzen
Dynamisches Binden unter Windows/Unix
Tools & Compiler-Optionen (z.B. cc -S, cc -c)