Wie kompiliert der Computer eigentlich Quell Code?

...komplette Frage anzeigen

6 Antworten

Der Compiler ist letztlich auch nur ein ausführbares Programm, das in der Lage ist, aus einem Quellcode ein für den Computer ausführbares Programm zu erzeugen. Das "wie" ist eine eigenständige Disziplin der Informatik:

https://de.wikipedia.org/wiki/Compilerbau

Vergleichbar ist es mit der Leistung Deines Gehirns, wenn jemand sagt "Mach bitte das Licht an!" und Du analysierst das Gesagte und setzt es in Muskelbewegungen hin zum Lichtschalter und eine Anschaltbewegung um.

Das beantwortet auch die Frage, warum das ausführbare Programm größer ist: Es sind ganz, ganz viele Einzelaktionen, die für den einfachen Vorgang "Licht anschalten" benötigt werden und koordiniert werden müssen.

Antwort bewerten Vielen Dank für Deine Bewertung

Der aus deinem Source-Code vom Compiler erstellte Binärcode ist i.A. kaum umfangreicher als dein Sourcecode.

Aber bedenke: Um aus diesem Binärcode eine ablauffähiges Programm zu machen, muss er ergänzt werden um Code aus Standardbibliotheken. Erst das führt dann zu einer deutlich größeren Programmdatei.

Mit anderen Worten: Dein ablauffähiges Programm besteht keineswegs nur aus Code, der aus dem entsteht, den du selbst geschrieben hast.

Antwort bewerten Vielen Dank für Deine Bewertung

Ne IDE ist ja auch nur ein zusammenschluss von aufgebohrtem Texteditor und Compiler. Beim kompilieren wird der von dir geschriebene Text in bytecode übersetzt - das kann man als Mensch dann nichtmehr lesen. Was dem am nächsten kommt ist dann Assembler.

Der Code ist deshalb größer weil viele Dinge wie z.B. Schleifen vordefinierte Codebausteine haben welche der Compiler zusammensetzt ( mal platt ausgedrückt)

Gruß Cynob

Antwort bewerten Vielen Dank für Deine Bewertung
Cynob 12.10.2016, 20:22

Zur Dateigröße nochmal - es hängt ja bei dem Code noch mehr hintendrann als das was man schreiben muss. z.B. ein einfaches Serialwrite beim Arduino z.B. muss ja ggf erstmal die Verbindung aufgebaut dann daten verschickt verbindung geschlossen, dabei der benötigte Speicher reserviert werden etc.

Das alles steckt dann in dem kleinen Befehl und somit wirds größer :)

2

Und jetzt frage ich mich, was eigentlich technisch passiert, wenn der Code kompiliert wird

Gucks dir doch einfach an. Wenn du mit gcc kompilierst, dann müsste die Anweisung

gcc -S hello.c

eine .s-Datei erzeugt, in der der Assembler-Code steckt.

weil das ausführbare Programm ja meist viel größer ist, als der Quellcode selbst

Das ist bei Wikipedia schön erklärt.

https://de.wikipedia.org/wiki/Maschinensprache

In dem Beispiel wird die simple c-Zeile

int c=a + b; 

in Assembler zu


mov eax, DWORD PTR [rbp-8]

mov edx, DWORD PTR [rbp-4]

add eax, edx


mov DWORD PTR [rbp-12], eax


und diese Anweisungen sind 3 + 3 + 2 + 3 = 11 Byte groß.

Antwort bewerten Vielen Dank für Deine Bewertung

Der Quellcode, den du schreibst, wird von dem Kompiler in Maschinensprache also sprich 101010 übersetzt. Diese Befehle werden dann von dem Prozessor verarbeitet.

Hoffe das hilft :)

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?