Nejlepší odpověď
Než přejdeme k rozdílu, pojďme se stručně podívat na proces propojení.
Proč linker?
Když píšete nějaký kód C (nebo jakýkoli jiný jazyk), uloží se ve formátu .c.
#include
int main(){
printf("quora");
return 0;
}
Nyní tento program prochází fází kompilace, ve které tento zdrojový kód je převeden na pokyny strojového jazyka. Jedná se o soubory objektů uložené ve formátu .o nebo .obj. Pokud máme 2 samostatné soubory, budeme mít 2 samostatné soubory obj. Tyto soubory jsou pouze překladem vašeho programu. Abychom tyto programy mohli spustit, musíme vygenerovat spustitelný soubor, který může operační systém skutečně spustit. Pro tento účel používáme linker.
Linker nyní vytvoří jeden spustitelný soubor z mnoha souborů objektů. Nyní jsme v našem programu C použili funkci main (), ale kde je její definice. Rozsah kompilátoru je omezen pouze na jeden soubor, takže nehledá odkazy, které by mohly být deklarovány a definovány v jiných souborech.
Linker prohledá více souborů pro tuto definici funkce „main ()“ a spojuje je. Nyní přicházíme k vaší otázce.
Statické a dynamické odkazy:
- V statické propojení , všechny moduly knihovny jsou zkopírovány do konečného spustitelného obrazu. Když je program načten, OS umístí do paměti pouze jeden soubor, který obsahuje zdrojový kód i odkazující knihovny. Zatímco v dynamickém propojení se do paměti ukládají pouze názvy externích nebo sdílených knihoven. Dynamické propojení umožňuje mnoha programům používat jednu kopii spustitelného modulu.
- Statické propojení provádí linkery v posledním kroku kompilace, zatímco dynamické propojení provádí OS za běhu.
- Staticky propojené soubory spotřebovávají více disku a paměti, protože všechny moduly jsou již propojeny. Ale v Dynamickém propojení je uložena pouze jedna kopie referenčního modulu, kterou využívá mnoho programů, čímž šetří paměť a místo na disku.
- V statickém propojení , pokud je změněn program externího zdroje, musí být znovu zkompilován a znovu propojen. V případě dynamického propojení však musí být aktualizován a překompilován pouze jeden modul.
- Staticky propojené programy jsou rychlejší než jejich dynamický protějšek.
- Protože staticky propojený soubor obsahuje každý balíček a modul, nedochází k žádným problémům s kompatibilitou. Zatímco v dynamickém propojení , protože soubory knihovny jsou ukládány samostatně, mohou nastat problémy s kompatibilitou (řekněme, že jeden soubor knihovny je kompilován novou verzí kompilátoru).
- Staticky propojené programy vždy zabírají konstantní dobu načítání, zatímco čas je u dynamicky propojených programů proměnlivý.