Bedste svar
Før vi går videre til forskellen, kan vi se sammenkædningsprocessen kort.
Hvorfor linker?
Når du skriver en C-kode (eller et hvilket som helst andet sprog), gemmes den i .c-format.
#include
int main(){
printf("quora");
return 0;
}
Nu gennemgår dette program den kompileringsfase, hvor dette kildekoden konverteres til maskinens sproginstruktioner. Dette er objektfilerne, der er gemt som .o- eller .obj-format. Hvis vi har 2 separate filer, har vi 2 separate obj-filer. Disse filer er kun oversættelsen af dit program. For at køre disse programmer skal vi generere eksekverbar, som operativsystemet faktisk kan køre. Til dette formål bruger vi linker.
Nu opretter linker en enkelt eksekverbar fil ud af mange objektfiler. Nu i vores C-program brugte vi main () -funktionen, men hvor er dens definition. Kompilatorens omfang er kun begrænset til en fil, så den ikke ser efter referencer, der muligvis er blevet deklareret og defineret i andre filer.
Linker søger i flere filer efter denne “hoved ()” -funktionsdefinition og forbinder dem. Kommer nu til dit spørgsmål.
Statisk versus dynamisk linkning:
- I statisk sammenkædning , alle biblioteksmoduler kopieres til det endelige eksekverbare billede. Når programmet er indlæst, placerer OS kun en enkelt fil i hukommelsen, der indeholder både kildekoden og de referencebiblioteker. Mens der i dynamisk sammenkædning kun navnene på eksterne eller delte biblioteker placeres i hukommelsen. Dynamisk sammenkædning lader mange programmer bruge en enkelt kopi af det eksekverbare modul.
- Statisk sammenkædning udføres af linkerne i det sidste trin i kompileringen, mens dynamisk sammenkædning udføres ved kørselstidspunktet af operativsystemet.
- Statisk linkede filer forbruger mere disk og hukommelse, da alle modulerne allerede er forbundet. Men i Dynamisk sammenkædning gemmes kun en kopi af referencemodulet, som bruges af mange programmer og derved sparer hukommelse og diskplads.
- I Statisk sammenkædning hvis eksternt kildeprogram ændres, skal de kompileres igen og genlinkes. Men i tilfælde af dynamisk sammenkædning behøver kun et enkelt modul at blive opdateret og genkompileret.
- Statisk linkede programmer er hurtigere end deres dynamiske modstykke.
- Da filen statisk sammenkædede indeholder alle pakker og moduler, opstår der ingen problemer med kompatibilitet. Mens der i dynamisk sammenkædning , da biblioteksfilerne er gemt separat, kan der være problemer med kompatibiliteten (siger, at en biblioteksfil er kompileret af den nye version af compileren).
- Statisk forbundne programmer tager altid konstant belastningstid, mens tiden er variabel i dynamisk forbundne programmer.