Was ist der Unterschied zwischen statischer und dynamischer Verknüpfung?


Beste Antwort

Bevor wir zum Unterschied übergehen, sehen wir uns den Verknüpfungsprozess kurz an.

Warum Linker?

Wenn Sie C-Code (oder eine andere Sprache) schreiben, wird dieser im C-Format gespeichert.

#include

int main(){

printf("quora");

return 0;

}

Dieses Programm durchläuft nun die Kompilierungsphase, in der dies erfolgt Der Quellcode wird in maschinensprachliche Anweisungen konvertiert. Dies sind die Objektdateien, die im OO- oder OBJ-Format gespeichert sind. Wenn wir 2 separate Dateien haben, haben wir 2 separate obj-Dateien. Diese Dateien sind nur die Übersetzung Ihres Programms. Um diese Programme auszuführen, müssen wir eine ausführbare Datei generieren, die das Betriebssystem tatsächlich ausführen kann. Zu diesem Zweck verwenden wir den Linker.

Jetzt erstellt der Linker eine einzelne ausführbare Datei aus vielen Objektdateien. Jetzt haben wir in unserem C-Programm die Funktion main () verwendet, aber wo ist ihre Definition? Der Umfang des Compilers ist auf nur eine Datei beschränkt, sodass nicht nach Referenzen gesucht wird, die möglicherweise in anderen Dateien deklariert und definiert wurden.

Linker durchsuchen mehrere Dateien nach dieser Funktionsdefinition „main ()“ und verknüpft sie. Kommen wir nun zu Ihrer Frage.

Statische und dynamische Verknüpfung:

  1. In statische Verknüpfung , alle Bibliotheksmodule werden in das endgültige ausführbare Image kopiert. Wenn das Programm geladen wird, legt das Betriebssystem nur eine einzige Datei im Speicher ab, die sowohl den Quellcode als auch die referenzierenden Bibliotheken enthält. Während in dynamische Verknüpfung nur die Namen externer oder gemeinsam genutzter Bibliotheken im Speicher abgelegt werden. Durch die dynamische Verknüpfung können viele Programme eine einzelne Kopie des ausführbaren Moduls verwenden.
  2. Die statische Verknüpfung wird von den Linkern im letzten Schritt der Kompilierung durchgeführt Die dynamische Verknüpfung wird zur Laufzeit vom Betriebssystem ausgeführt.
  3. Statisch verknüpfte Dateien verbrauchen mehr Festplatte und Speicher, da alle Module bereits verbunden sind. In Dynamische Verknüpfung wird jedoch nur eine Kopie des Referenzmoduls gespeichert, die von vielen Programmen verwendet wird, wodurch Speicher und Speicherplatz gespart werden.
  4. Wenn in Statische Verknüpfung ein externes Quellprogramm geändert wird, müssen diese neu kompiliert und neu verknüpft werden. Bei dynamischer Verknüpfung muss jedoch nur ein einziges Modul aktualisiert und neu kompiliert werden.
  5. Statisch verknüpfte Programme sind schneller als ihr dynamisches Gegenstück.
  6. Da die statisch verknüpfte Datei jedes Paket und Modul enthält, treten keine Kompatibilitätsprobleme auf. Während in dynamische Verknüpfung , da die Bibliotheksdateien separat gespeichert werden, Kompatibilitätsprobleme auftreten können (z. B. wird eine Bibliotheksdatei von einer neuen Version des Compilers kompiliert).
  7. Statisch verknüpfte Programme benötigen immer eine konstante Ladezeit, während die Zeit in dynamisch verknüpften Programmen variabel ist.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.