Moin,
Sorry, ich hab bis jetzt nur gehoert, dass die Compiler den direkt in
Maschinencode uebersetzen.
Eines der prominentesten Gegenbeispiele ist wohl
gcc bzw. g++.
Es gibt da noch ganz andere Variationen, z.B. erzeugt "g77" aus
einem FORTRAN Programm C-Code, der dann wiederum an
gcc übergeben wird, um schließlich als Assembler-Source von
"as" in ein Objekt-File umgewandelt zu werden.
Haeh?! Das ist jetzt wirklich Quatsch!
Der Maschinencode wird vom Prozessor ausgefuehrt, Punkt. Da
pfuscht kein Betriebssystem oder sonstwas drin rum. Das BS selbst
ist ja schliesslich auch nur Maschinencode, nichts anderes als
ein stinknormales Programm.hm, tut mir leid, ich hab das anders gelernt... oder ich werf da was
durcheinander *g*
Zu ergänzen ist an dieser Stelle vielleicht noch, daß in einem
Maschinenprogramm absolute Sprungadressen auftreten können.
Da der Speicherbereich des Programms bei jedem Aufruf
verschieden sein kann, müssen diese Sprungadressen
entsprechend angepaßt werden, was in der Tat eine Aufgabe
des Betriebssystems ist (man nennt diesen Vorgang
dann imho 'relozieren').
Die Art, wie und wo diese Sprungadressen im Binärfile
abgelegt sind usw. unterscheidet sich je nach Betriebssystem.
Von dem ersten Compiler hab ich geredet.. der wird wohl in
Maschinencode geschrieben worden sein, zumindest hoert sich das
logisch fuer mich an *g*
Wird wohl sein - ich denke jedenfalls nicht, daß der erste
C-Compiler in Basic geschrieben wurde ;-)
Danach geht es munter die Abstraktionsleiter aufwärts.
So ist z.B. sowohl gcc als auch g++ selbst in C geschrieben.
gcc benötigt also erstmal einen "anderen" C-Compiler, um
selber zu funktionieren. Dafür kann gcc sich dann im zweiten
Durchgang selbst optimieren...
Bis dannundwann
Andreas