La compilazione di un programma viene suddivisa in 2 passi:
analisi (lessicale, grammaticale, semantica)
trasformazione del programma sorgente in programma oggetto (forma più vicina al linguaggio macchina)
creazione tabella simboli; ottimizzazioni (rimozione ripetizioni, eliminazione cicli,
sfruttamento registri, ); livelli di ottimizzazione.Il codice oggetto così formato può ancora contenere dei simboli irrisolti, come riferimenti a programmi di libreria o di servizio creati dallo stesso programmatore, é un programma chiamato Linker che si occupa di collegare i diversi moduli oggetto producendo un file binaro in formato eseguibile.
Il modulo generato dal linker fa riferimento ad indirizzi relativi (rilocabile), il loader stabilisce la zona di memoria in cui caricare il programma trasformando gli indirizzi relativi in indirizzi assoluti.