vault backup: 2025-07-07 19:57:44

This commit is contained in:
fzzinchemical
2025-07-07 19:57:44 +02:00
parent 1638e96536
commit ed7da1341b
14 changed files with 1982 additions and 0 deletions

View 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`)
---