2013-08-11 21 views
8

Dlaczego C należy rekompilować dla każdej architektury? Czy to nie wszystko kończy się jako bity i bajty, ładunki i skoki? Czy nie każda architektura zasadniczo przechodzi przez najbardziej podstawowe polecenia w ten sam sposób?Dlaczego platforma C jest zależna?

+0

C jest językiem średniego poziomu :) –

+1

Kwantyfikowanie "architektury". (Czy myślisz, że układ x86 używa na przykład tych samych instrukcji co układ ARM?) –

+4

'Czy nie każda architektura zasadniczo przechodzi przez najbardziej podstawowe polecenia w ten sam sposób?' *** Nie do końca ***. Zdecydowanie nie w * dokładnie * taki sam sposób, co oznacza niezależność od platformy. –

Odpowiedz

10
  1. Różne procesory mają różne architektury instrukcji (np. X86 vs ARM).
    • Wczesne komputery Mac wykorzystywały architekturę Motorola 68k; później używał PowerPC; a jeszcze później używał x86. Podczas każdego z tych przejść programiści musieli wysyłać pliki wykonywalne jako fat binaries, które zawierałyby kod obiektowy dla obu architektur.
  2. Obecne procesory x86 mają tryby 32-bitowy i 64-bitowy.
    • Dlatego masz 32-bitowe i 64-bitowe wersje systemu Windows, Ubuntu itp
  3. Różne systemy operacyjne zapewniają różne wywołania systemowe, biblioteki, itp
    • Różne wersje OS może również udostępniać różne wywołania systemowe, biblioteki itp. (Chociaż dostawcy systemów operacyjnych starają się być w miarę możliwości zgodni wstecz).
  4. Nawet w tym samym systemie operacyjnym nie ma gwarancji, że konwencja wywoływania będzie taka sama dla różnych kompilatorów.
    • Nawet w tym samym systemie operacyjnym mogą być używane różne formaty plików wykonywalnych. Na przykład w wielu systemach uniksowych używany był format a.out, ale ostatecznie został on przełączony na ELF. W okresie przejściowym biblioteki musiały być dostarczane w obu formatach.
1

Ale każda maszyna ma swój własny instruction set

+0

To jest w najlepszym razie komentarz. –

+3

@middaparka: To wydaje się być odpowiedź, AFAICS. (Choć nie bardzo szczegółowy.) –

+0

@OliCharlesworth Jeden z nich, tak. – glglgl

2

Nie każda architektura w zasadzie przejść przez najbardziej podstawowych komend w ten sam sposób?

W przeważającej części. Ale te podstawowe polecenia różnią się w inny sposób. Kompilator języka C jest odpowiedzialny za upewnienie się, że używane są poprawne reprezentacje i implementacje.

+0

ten komentarz prawdopodobnie wyjaśnił to najlepiej dla mnie, dzięki – Aristides

2

Tak, ale wszystkie te obciążenia i skoki itp. Wyglądają inaczej na różnych platformach. Każda rodzina procesorów ma swój własny zestaw poleceń.

Na wyższym poziomie, jeśli mamy ten sam sprzęt, ale różne systemy operacyjne (takie jak Linux/Windows), mamy różne biblioteki, różne formaty plików wykonywalnych i tak dalej.

Wszystkie te rzeczy muszą być przestrzegane przez kompilator i linker.

0

Każdy spróbować streszczenie niektórych funkcji, jak każdy język zrobić, musi być dostosowany do konkretnej architektury, lub utworzyć wirtualną maszynę (dla każdej architektury), że można go uruchomić.

Powiązane problemy