Beste antwoord
Laten we, voordat we verder gaan met het verschil, eerst het koppelingsproces bekijken.
Waarom linker?
Wanneer u een C-code (of een andere taal) schrijft, wordt deze opgeslagen in .c-indeling.
#include
int main(){
printf("quora");
return 0;
}
Dit programma doorloopt nu de compilatiefase waarin dit broncode wordt geconverteerd naar instructies in machinetaal. Dit zijn de objectbestanden die zijn opgeslagen als .o- of .obj-indeling. Als we 2 aparte bestanden hebben, hebben we 2 aparte obj-bestanden. Deze bestanden zijn slechts de vertaling van uw programma, om deze programmas uit te voeren, moeten we een uitvoerbaar bestand genereren dat het besturingssysteem ook daadwerkelijk kan uitvoeren. Voor dit doel gebruiken we linker.
Nu maakt linker een enkel uitvoerbaar bestand uit vele objectbestanden. Nu hebben we in ons C-programma de functie main () gebruikt, maar waar is de definitie. Het bereik van de compiler is beperkt tot slechts één bestand, dus het zoekt niet naar referenties die mogelijk zijn gedeclareerd en gedefinieerd in andere bestanden.
Linker zoekt in meerdere bestanden naar deze “main ()” functiedefinitie verbindt ze. Nu komt uw vraag.
Statisch versus dynamisch linken:
- In statische koppeling , worden alle bibliotheekmodules gekopieerd naar de uiteindelijke uitvoerbare afbeelding. Wanneer het programma is geladen, plaatst OS slechts één bestand in het geheugen dat zowel de broncode als de verwijzende bibliotheken bevat. Terwijl in dynamische koppeling alleen de namen van externe of gedeelde bibliotheken in het geheugen worden geplaatst. Met dynamische koppeling kunnen veel programmas een enkele kopie van de uitvoerbare module gebruiken.
- Statische koppeling wordt gedaan door de linkers in de laatste stap van de compilatie, terwijl de dynamische koppeling wordt uitgevoerd tijdens runtime door het besturingssysteem.
- Statisch gekoppelde bestanden verbruiken meer schijf en geheugen omdat alle modules al zijn gekoppeld. Maar in Dynamische koppeling wordt slechts één kopie van de referentiemodule opgeslagen die door veel programmas wordt gebruikt, waardoor geheugen en schijfruimte worden bespaard.
- In Statisch linken , als het externe bronprogramma wordt gewijzigd, moeten ze opnieuw worden gecompileerd en opnieuw worden gelinkt. Maar in het geval van dynamische koppeling hoeft slechts een enkele module te worden bijgewerkt en opnieuw gecompileerd.
- Statisch gekoppelde programmas zijn sneller dan hun dynamische tegenhanger.
- Aangezien het statisch gelinkt bestand elk pakket en elke module bevat, treden er geen compatibiliteitsproblemen op. Terwijl in dynamische koppeling , aangezien de bibliotheekbestanden afzonderlijk worden opgeslagen, er compatibiliteitsproblemen kunnen zijn (stel dat één bibliotheekbestand wordt gecompileerd door een nieuwe versie van de compiler).
- Statisch gekoppelde programmas nemen altijd een constante laadtijd in beslag, terwijl de tijd variabel is in dynamisch gekoppelde programmas.