Warum ist C plattformabhängig? [Duplikat]

8

Warum muss C für jede Architektur neu kompiliert werden? Geht das nicht alles als Bits und Bytes und lädt und springt sowieso? Geht nicht jede Architektur im Wesentlichen auf die gleiche Weise durch die grundlegendsten Befehle?

    
Aristides 11.08.2013, 11:10
quelle

5 Antworten

10
  1. Verschiedene CPUs haben unterschiedliche Befehlsarchitekturen (z. B. x86 vs ARM).
    • Frühe Macs verwendeten die Motorola 68k Architektur; Später verwendeten PowerPC; und noch später verwendeten sie x86. Während jeder dieser Übergänge mussten Entwickler ihre ausführbaren Dateien als fette Binärdateien versenden, die Objektcode für beide Architekturen enthalten würden.
  2. Aktuelle x86-CPUs haben 32-Bit- und 64-Bit-Modi.
    • Deshalb haben Sie 32-Bit- und 64-Bit-Versionen von Windows, Ubuntu, etc.
  3. Verschiedene Betriebssysteme bieten verschiedene Systemaufrufe, Bibliotheken usw.
    • Unterschiedliche OS -Versionen können auch verschiedene Systemaufrufe, Bibliotheken usw. bereitstellen (obwohl OS-Hersteller darauf abzielen, so weit wie möglich abwärtskompatibel zu sein).
  4. Selbst unter demselben Betriebssystem ist die Aufrufkonvention nicht garantiert die gleiche zwischen verschiedenen Compilern.
    • Auch unter dem gleichen Betriebssystem können verschiedene ausführbare Dateiformate verwendet werden. Zum Beispiel war auf vielen Unix-Systemen a.out das verwendete Format, aber die meisten wechselten schließlich zu ELF. Während der Übergangsphase mussten Bibliotheken in beiden Formaten bereitgestellt werden.
Chris Jester-Young 11.08.2013, 11:14
quelle
2
  

Geht nicht jede Architektur im Grunde die grundlegendsten Befehle auf die gleiche Weise durch?

Zum größten Teil. Aber diese grundlegenden Befehle sind dargestellt oder implementiert anders. Der C-Compiler ist dafür verantwortlich, dass die korrekten Darstellungen und Implementierungen verwendet werden.

    
Ignacio Vazquez-Abrams 11.08.2013 11:13
quelle
2

Ja, aber all diese Lasten und Sprünge usw. sehen auf verschiedenen Plattformen anders aus. Jede CPU-Familie hat ihren eigenen Befehlssatz.

Auf einer höheren Ebene, wenn wir die gleiche Hardware, aber verschiedene Betriebssysteme (wie Linux / Windows) haben, haben wir verschiedene Bibliotheken, verschiedene ausführbare Dateiformate und so weiter.

All dies sind Dinge, denen der Compiler und der Linker folgen müssen.

    
glglgl 11.08.2013 11:13
quelle
1

Aber jede Maschine hat ihren eigenen Befehlssatz

    
user2671945 11.08.2013 11:13
quelle
0

Jeder Versuch, einige Features wie jede Sprache zu abstrahieren, muss auf die konkrete Architektur abgestimmt sein oder eine virtuelle Maschine (für jede Architektur) erstellen, die sie ausführen kann.

    
Miguel Prz 11.08.2013 11:34
quelle

Tags und Links