Frage von JuliusAX, 34

Wie kompiliert der Computer eigentlich Quell Code?

Hallo,

ich habe heute angefangen in C zu programmieren und das ist nicht die erste Programmiersprache, die ich lerne, aber mein erstes Mal ohne IDE. Ich schreibe den Code also im Editor (Gedit weil ich ubuntu nutze) und kompiliere ihn dann über das Terminal. Und jetzt frage ich mich, was eigentlich technisch passiert, wenn der Code kompiliert wird, weil das ausführbare Programm ja meist viel größer ist, als der Quellcode selbst (Code: 404 Bytes; Programm: 8,8 kB).

Vielen Dank für jede Antwort!

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von zalto, 20

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
von ceevee, 24

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
von Cynob, 24

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

Kommentar von Cynob ,

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 :)

Antwort
von grtgrt, 8

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
von JerryLee24, 16

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
von Franz1957, 3

Wenn Du es noch genauer wissen möchtest, kannst Du z.B. hier schauen...

http://www.telos.de/l/sprachen/compiler/

http://parsingintro.sourceforge.net/

Keine passende Antwort gefunden?

Fragen Sie die Community