Unterschied zwischen Ladezeit und dynamischer Laufzeitverknüpfung

8

Was ist der Unterschied zwischen der dynamischen Verknüpfung der Ladezeit und der dynamischen Verknüpfung der Laufzeit?

    
Jacob 16.02.2009, 04:14
quelle

3 Antworten

14

Dynamische Verknüpfung zur Ladezeit

Wenn eine ausführbare Datei zum Zeitpunkt der Erstellung mit einer DLL verknüpft wird, fügt der Linker keinen Objektcode ein, sondern fügt einen Stub ein, der im Grunde eine Funktion dieses Namens angibt befindet sich in dieser DLL .

Jetzt, wenn die ausführbare Datei ausgeführt wird, fehlen die Bits der ausführbaren Datei (dh die Funktions-Stubs ). Bevor das Programm den Programmlader ausführen kann, werden diese fehlenden Funktionen durch Ersetzen der entsprechenden Dateien behoben Einstiegspunkte in die DLL-Dateien.

Erst nachdem alle Stubs ersetzt wurden (d. h. behoben), wird die ausführbare Datei ausgeführt.

Das ist Ladezeit dynamische Verknüpfung.

Dynamische Laufzeitverknüpfung

In diesem Fall wurde die ausführbare Datei nicht mit einer DLL-Bibliotheksdatei verknüpft, daher enthält sie keine Stubs in der DLL und als solche hat der Programmlader kein Problem, wenn er die ausführbare Datei ausführt.

Aber die Aufgabe, Zugriff auf die Funktion von innerhalb der DLL zu erhalten, bleibt der ausführbaren Datei und kann mit der GetProcAddress Windows-API erfolgen.

Das ist Laufzeit dynamische Verknüpfung.

    
jussij 16.02.2009 04:40
quelle
2

Sie haben das "Hausaufgaben" -Tag vergessen.

Ladezeitverknüpfung bedeutet, dass die DLL, mit der Sie eine Verknüpfung herstellen, beim Start der Anwendung geladen wird, unabhängig davon, ob Sie die Funktionalität in dieser DLL tatsächlich verwenden oder nicht. Dynamische Verknüpfung bedeutet, dass die Funktionalität der DLL nur geladen wird, wenn sie tatsächlich benötigt wird.

    
Ken White 16.02.2009 04:18
quelle
0

Ladezeit dynamische Verknüpfung wird vom Betriebssystem durchgeführt, wenn eine Anwendung geladen wird. OS verwendet den Informationslink, der in der Datei platziert wurde, um die Namen der DLL zu finden, und sucht dann nach diesen DLLs. Und wenn es die DLL nicht finden kann, wird es einfach beendet und gibt eine Fehlermeldung aus, andernfalls ordnet OS die DLL zu virtueller Adressraum des Prozesses und erhöht die Anzahl der DLL-Referenzen.

    
Sweekritee Singh 24.01.2017 15:10
quelle

Tags und Links