vault backup: 2025-07-07 19:57:44
This commit is contained in:
121
Semester 6/COMARCH/Zusammenfassung/Vorlesung 10.md
Normal file
121
Semester 6/COMARCH/Zusammenfassung/Vorlesung 10.md
Normal file
@@ -0,0 +1,121 @@
|
||||
## 📘 **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)
|
||||
|
||||
```c
|
||||
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`)
|
||||
|
||||
---
|
||||
Reference in New Issue
Block a user