Raccomandato, 2024

Scelta Del Redattore

Differenza tra linker e caricatore

Linker e Loader sono i programmi di utilità che svolgono un ruolo importante nell'esecuzione di un programma. Il codice sorgente di un programma passa attraverso compilatore, assemblatore, linker, loader nel rispettivo ordine, prima dell'esecuzione. Da un lato, dove il linker prende i codici oggetto generati dall'assemblatore e li combina per generare il modulo eseguibile. D'altra parte, il caricatore carica questo modulo eseguibile nella memoria principale per l'esecuzione. Cerchiamo di discutere la differenza tra Linker e loader con l'aiuto di una tabella di confronto.

Grafico comparativo

Base per il confrontolinkercaricatore
Di baseGenera il modulo eseguibile di un programma sorgente.Carica il modulo eseguibile nella memoria principale.
IngressoPrende come input, il codice oggetto generato da un assemblatore.Prende il modulo eseguibile generato da un linker.
FunzioneCombina tutti i moduli oggetto di un codice sorgente per generare un modulo eseguibile.Alloca gli indirizzi a un modulo eseguibile nella memoria principale per l'esecuzione.
Tipo / ApproccioLinkage Editor, linker dinamico.Caricamento assoluto, caricamento rilocabile e caricamento dinamico in fase di esecuzione.

Definizione di Linker

L'assemblatore genera il codice oggetto di un programma sorgente e lo consegna al linker. Il linker prende questo codice oggetto e genera il codice eseguibile per il programma e lo consegna al caricatore.

Il linguaggio di alto livello, i programmi hanno alcune librerie e file di intestazione incorporati . Il programma sorgente può contenere alcune funzioni di libreria la cui definizione è memorizzata nelle librerie incorporate. Il linker collega queste funzioni alle librerie incorporate. Nel caso in cui le librerie incorporate non vengano trovate, informa il compilatore e il compilatore genera l'errore.

A volte i programmi di grandi dimensioni sono suddivisi in sottoprogrammi chiamati moduli . Ora quando questi moduli vengono compilati e assemblati, vengono generati i moduli oggetto del programma sorgente. Il linker ha la responsabilità di combinare / collegare tutti i moduli oggetto per generare un singolo file eseguibile del programma sorgente. Abbiamo due tipi di linker.

Linkage Editor : è un linker che genera il relocabile, eseguibile modulo.

Linker dinamico : rimanda / posticipa il collegamento di alcuni moduli esterni fino a quando viene generato il modulo di carico / modulo eseguibile. Qui, il collegamento viene eseguito durante il caricamento o il tempo di esecuzione.

Definizione di Caricatore

Poiché il programma che deve essere eseguito al momento deve risiedere nella memoria principale del computer. È responsabilità del programma di caricamento, un programma in un sistema operativo, caricare il file eseguibile / modulo di un programma, generato dal linker, nella memoria principale per l'esecuzione. Alloca lo spazio di memoria al modulo eseguibile nella memoria principale.

Esistono tre tipi di approcci di caricamento:

  • Caricamento assoluto
  • Caricamento rilocabile
  • Caricamento dinamico in fase di esecuzione

Caricamento assoluto : questo approccio carica il file eseguibile di un programma in una stessa posizione di memoria principale ogni volta. Ma ha alcuni svantaggi come un programmatore deve essere consapevole della strategia di assegnazione per il caricamento dei moduli nella memoria principale. Nel caso in cui il programma debba essere modificato comportando qualche inserimento e cancellazione nel programma, allora tutti gli indirizzi del programma devono essere modificati.

Caricamento rilocabile: in questo approccio, il compilatore o l'assemblatore non produce l'effettivo indirizzo di memoria principale . Produce gli indirizzi relativi.

Caricamento dinamico in fase di esecuzione : in questo approccio, l'indirizzo assoluto per un programma viene generato quando viene effettivamente eseguita un'istruzione di un modulo eseguibile. È molto flessibile, il modulo caricabile / modulo eseguibile può essere caricato in qualsiasi area della memoria principale . Il programma in esecuzione può essere interrotto tra e può essere scambiato sul disco e tornare alla memoria principale questa volta con un diverso indirizzo di memoria principale.

Differenze chiave tra linker e caricatore

  1. La differenza chiave tra linker e loader è che il linker genera il file eseguibile di un programma mentre il caricatore carica il file eseguibile ottenuto dal linker nella memoria principale per l'esecuzione .
  2. Il linker assume il modulo oggetto di un programma generato dall'assembler. Tuttavia, il caricatore assume il modulo eseguibile generato dal linker.
  3. Il linker combina tutti i moduli oggetto di un programma per generare moduli eseguibili, collega inoltre la funzione di libreria nel modulo oggetto alle librerie incorporate del linguaggio di programmazione di alto livello. D'altra parte, il caricatore alloca lo spazio a un modulo eseguibile nella memoria principale.
  4. Il linker può essere classificato come editor di linkage e linker dinamico mentre il loader può essere classificato come loader assoluto, caricatore rilocabile e caricatore dinamico di runtime .

Conclusione:

Il linker prende i moduli oggetto di un programma dall'assemblatore e li collega insieme per generare un modulo eseguibile di un programma. Il modulo eseguibile viene quindi caricato dal caricatore nella memoria principale per l'esecuzione.

Top