Risposta migliore
Prima di passare alla differenza, vediamo brevemente il processo di collegamento.
Perché linker?
Quando scrivi del codice C (o qualsiasi altra lingua), viene memorizzato in formato .c
#include
int main(){
printf("quora");
return 0;
}
Ora questo programma passa attraverso la fase di compilazione in cui questo il codice sorgente viene convertito in istruzioni in linguaggio macchina. Questi sono i file oggetto archiviati in formato .o o .obj. Se abbiamo 2 file separati, avremo 2 file obj separati. Questi file sono solo la traduzione del tuo programma, per eseguire questi programmi dobbiamo generare eseguibili che il sistema operativo possa effettivamente eseguire. A questo scopo, usiamo il linker.
Ora il linker crea un singolo file eseguibile da molti file oggetto. Ora nel nostro programma C abbiamo usato la funzione main (), ma dovè la sua definizione. Lambito del compilatore è limitato a un solo file, quindi non cerca riferimenti che potrebbero essere stati dichiarati e definiti in altri file.
Il linker cerca più file per questa definizione di funzione “main ()” e li collega. Veniamo ora alla tua domanda.
Collegamento statico e dinamico:
- In collegamento statico , tutti i moduli della libreria vengono copiati nellimmagine eseguibile finale. Quando il programma viene caricato, il sistema operativo inserisce un solo file nella memoria che contiene sia il codice sorgente che le librerie di riferimento. Mentre in collegamento dinamico vengono inseriti nella memoria solo i nomi delle librerie esterne o condivise. Il collegamento dinamico consente a molti programmi di utilizzare una singola copia del modulo eseguibile.
- Il collegamento statico viene eseguito dai linker nel passaggio finale della compilazione, mentre il collegamento dinamico viene eseguito in fase di esecuzione dal sistema operativo.
- File collegati staticamente consuma più disco e memoria poiché tutti i moduli sono già collegati. Ma in collegamento dinamico, viene memorizzata solo una copia del modulo di riferimento che viene utilizzata da molti programmi, risparmiando così memoria e spazio su disco.
- In collegamento statico, se il programma sorgente esterno viene modificato, è necessario ricompilarlo e ricollegarlo. Ma in caso di collegamento dinamico solo un singolo modulo deve essere aggiornato e ricompilato.
- I programmi collegati staticamente sono più veloci della loro controparte dinamica.
- Poiché il file linkato staticamente contiene ogni pacchetto e modulo, non si verificano problemi di compatibilità. Mentre in collegamento dinamico , poiché i file di libreria sono archiviati separatamente potrebbero esserci problemi di compatibilità (supponiamo che un file di libreria sia compilato dalla nuova versione del compilatore).
- I programmi collegati staticamente richiedono sempre un tempo di caricamento costante, mentre il tempo è variabile nei programmi collegati dinamicamente.