2012-04-03 15 views
7

Wiem, co robi program ładujący dynamicznie. Ładuje programy w momencie, gdy aplikacja żąda w czasie wykonywania, minimalizując w ten sposób wydruk stopy pamięci. Ale tak naprawdę nie dostaję tego dynamicznego linkera? Jakie są jego zalety? Czytam wiele rzeczy w Internecie, ale mówią one abstrakcyjnie.Jaka jest różnica między dynamicznym linkerem i dynamicznym programem ładującym?

Czy ktoś może mi wyjaśnić kilka prostych przykładów?

+0

http://stackoverflow.com/questions/311882/what-do-do-statically-linked-and-dynamicznie-linked-mean/311889#311889 – Vijay

+0

@peter thanks! pomogło. –

Odpowiedz

6

Są to naprawdę dwa terminy na to samo.

W świecie Unix termin dynamiczny linker jest używany do oznaczenia komponentu systemu operacyjnego, który łączy biblioteki dynamiczne w środowisku wykonawczym, podczas gdy program ładujący na większości innych systemów zarówno ładuje program, jak i łączy biblioteki dynamiczne.

Ponieważ ładowanie bibliotek w systemach uniksowych odbywa się za pomocą osobnego komponentu (najczęściej jest to ld.so), dynamiczny linker jest uważany za coś odrębnego od programu ładującego. Kompilatorzy zwykle wstawiają kodeks na początku pliku wykonywalnego, aby załadować ld.so, a ld.so będzie kontynuować ładowanie pozostałych bibliotek zależnych przed wywołaniem main. Podczas ładowania programu odbywa się w przestrzeni jądra, łączenie bibliotek dynamicznych zwykle odbywa się w przestrzeni użytkownika.

W przeciwieństwie do systemu Windows, w którym zarówno program ładujący, jak i łączący biblioteki dynamiczne, jest wykonywany w trybie jądra.

Powiązane problemy