Quote Originariamente inviata da linux_r Visualizza il messaggio
Salve , mi sono posto una domanda: partendo dal fatto che il compilatore , a partire dal file sorgente scritto in linguaggio ad alto livello , una volta compilato , crea il modulo oggetto che è scritto in linguaggio macchina. Adesso sappiamo che il linguaggio macchina varia a seconda della macchina e dell'architettura. Quindi mi chiedo come fa il compilatore a conoscere il linguaggio macchina del calcolatore sul quale viene eseguito?
Grazie a tutti anticipatamente
Tipicamente lo stesso compilatore eseguito su piattaforme diverse (es. ARM e Intel) compila codice nativo per il processore su cui gira (nell'esempio ARM e Intel), perchè quando viene portato lo si predispone così.

I compilatori usualmente supportano (compilano) per default per la versione X di una certa famiglia di processori, lo stesso su cui girano; usando switch a riga di comando si può far sì che il codice sia eseguibile su CPU con determinate estensioni (64 bit, multimedia, oggi crittografia etc).

Per quanto ne so il compilatore più "jolly" è il mitico Gnu-C (gcc) che è stato portato su (praticamente) qualsiasi cosa, spesso in associazione con Linux e i suoi vari cugini (Unix, Aix e così via).

Nulla vieta (ma sono più rari,cross compiler) di far predisporre da un processore Intel un codice oggetto per ARM (si usano principalmente per preparare programmi per sistemi embedded).

Nel mondo desktop oggi esistono relativamente poche famiglie di CPU, con al primissimo posto Intel x86 ed evoluzioni, ARM e poche altre (IBM Power, qualche vestigia MIPS, qualche Itanium, ma sono ormai quasi spariti).