Bästa svaret
Innan vi går vidare till skillnaden kan vi se länkningsprocessen i korthet.
Varför länkar?
När du skriver någon C-kod (eller något annat språk) lagras den i .c-format.
#include
int main(){
printf("quora");
return 0;
}
Nu går detta program igenom sammanställningsfasen där detta källkoden konverteras till maskinens språkinstruktioner. Det här är objektfilerna som lagras i formatet .o eller .obj. Om vi har två separata filer kommer vi att ha två separata obj-filer. Dessa filer är bara översättningen av ditt program, för att köra dessa program måste vi generera körbara som operativsystemet faktiskt kan köras. För detta ändamål använder vi linker.
Nu skapar länkaren en enda körbar fil av många objektfiler. Nu i vårt C-program använde vi main () -funktionen, men var är dess definition. Kompilatorns omfattning är endast begränsad till en fil så att den inte letar efter referenser som kan ha deklarerats och definierats i andra filer.
Linker söker i flera filer efter denna ”huvud ()” -funktionsdefinition och länkar dem. Kommer nu till din fråga.
Statisk kontra dynamisk länk:
- I statisk länkning , alla biblioteksmoduler kopieras till den slutliga körbara bilden. När programmet laddas placerar OS bara en enda fil i minnet som innehåller både källkoden och referensbiblioteken. I dynamisk länkning placeras endast namnen på externa eller delade bibliotek i minnet. Med dynamisk länkning kan många program använda en enda kopia av den körbara modulen.
- Statisk länkning görs av länkarna i det sista steget i sammanställningen medan dynamisk länkning görs vid körning av operativsystemet.
- Statiskt länkade filer förbrukar mer disk och minne eftersom alla moduler redan är länkade. Men i Dynamisk länkning lagras bara en kopia av referensmodulen som används av många program och därmed sparar minne och diskutrymme.
- I Statisk länkning, om det externa källprogrammet ändras måste de kompileras om och länkas om. Men vid dynamisk länkning behöver bara en enda modul uppdateras och kompileras om igen.
- Statiskt länkade program är snabbare än deras dynamiska motsvarighet.
- Eftersom statiskt länkade -filen innehåller alla paket och moduler uppstår inga kompatibilitetsproblem. Medan i dynamisk länkning kan biblioteksfilerna lagras separat kan det finnas kompatibilitetsproblem (säg att en biblioteksfil sammanställs av en ny version av kompilatorn).
- Statiskt länkade program tar alltid konstant laddningstid medan tiden är variabel i dynamiskt länkade program.