Jaka jest różnica między łączeniem statycznym a dynamicznym?


Najlepsza odpowiedź

Zanim przejdziemy do tej różnicy, zobaczmy w skrócie proces tworzenia linków.

Dlaczego konsolidator?

Kiedy piszesz kod w C (lub w jakimkolwiek innym języku), jest on przechowywany w formacie .c.

#include

int main(){

printf("quora");

return 0;

}

Teraz ten program przechodzi przez fazę kompilacji, w której to kod źródłowy jest konwertowany na instrukcje języka maszynowego. Są to pliki obiektowe zapisane w formacie .o lub .obj. Jeśli mamy 2 oddzielne pliki, będziemy mieć 2 oddzielne pliki obj. Te pliki są po prostu tłumaczeniem twojego programu, aby uruchomić te programy, musimy wygenerować plik wykonywalny, który system operacyjny może faktycznie uruchomić. W tym celu używamy konsolidatora.

Teraz linker tworzy pojedynczy plik wykonywalny z wielu plików obiektowych. Teraz w naszym programie w C użyliśmy funkcji main (), ale gdzie jest jej definicja. Zakres kompilatora jest ograniczony tylko do jednego pliku, więc nie szuka odniesień, które mogły zostać zadeklarowane i zdefiniowane w innych plikach.

Linker przeszukuje wiele plików w celu znalezienia tej definicji funkcji „main ()” i łączy je. Przechodzę teraz do Twojego pytania.

Łączenie statyczne a dynamiczne:

  1. W linkowanie statyczne , wszystkie moduły biblioteki są kopiowane do końcowego obrazu wykonywalnego. Po załadowaniu programu system operacyjny umieszcza w pamięci tylko jeden plik, który zawiera zarówno kod źródłowy, jak i biblioteki odwołujące się. Podczas gdy w łączeniu dynamicznym w pamięci są umieszczane tylko nazwy bibliotek zewnętrznych lub współdzielonych. Łączenie dynamiczne pozwala wielu programom używać pojedynczej kopii modułu wykonywalnego.
  2. Łączenie statyczne jest wykonywane przez konsolidatory w ostatnim kroku kompilacji, podczas gdy dynamiczne łączenie jest wykonywane w czasie wykonywania przez system operacyjny.
  3. Pliki połączone statycznie zużywa więcej dysku i pamięci, ponieważ wszystkie moduły są już połączone. Ale w dynamicznym łączeniu jest przechowywana tylko jedna kopia modułu referencyjnego, która jest używana przez wiele programów, oszczędzając w ten sposób pamięć i miejsce na dysku.
  4. W łączeniu statycznym , jeśli zewnętrzny program źródłowy zostanie zmieniony, należy go ponownie skompilować i ponownie połączyć. Jednak w przypadku dynamicznego łączenia wystarczy zaktualizować i ponownie skompilować tylko jeden moduł.
  5. Statycznie połączone programy są szybsze niż ich dynamiczne odpowiedniki.
  6. Ponieważ plik z łączem statycznym zawiera każdy pakiet i moduł, nie występują żadne problemy ze zgodnością. Podczas gdy w dynamicznym łączeniu , ponieważ pliki bibliotek są przechowywane oddzielnie, mogą wystąpić problemy ze zgodnością (powiedzmy, że jeden plik biblioteki jest kompilowany przez nową wersję kompilatora).
  7. Programy połączone statycznie zawsze ładują się przez stały czas, podczas gdy czas jest zmienny w programach połączonych dynamicznie.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *