2010-07-28 5 views
84

Ich habe Microsofts MSDN und das ganze Internet angeschaut, aber ich habe immer noch keine wirklich gute Vorstellung davon bekommen, was es ist.Was ist "inkrementelle Verknüpfung"?

Bedeutet dies, dass das fertige Programm DLLs zu verschiedenen Zeitpunkten während seiner Ausführung lädt, wie alle gleichzeitig beim Start?

Bin ich total weg? :)

Antwort

97

Beim Verknüpfen werden alle OBJ-Dateien, die aus Ihren Quelldateien erstellt wurden, sowie alle LIB-Dateien, auf die Sie verweisen, in Ihre Ausgabe (z. B. EXE oder DLL) gepackt.

Ohne inkrementelle Verknüpfung muss jedes Mal von Grund auf neu erstellt werden.

Incremental Linking verbindet Ihre exe/dll auf eine Weise, die es für den Linker einfacher macht, die existierende exe/dll zu aktualisieren, wenn Sie eine kleine Änderung vornehmen und neu kompilieren.

So, inkrementelle Verknüpfung macht es nur schneller zu kompilieren und verknüpfen Sie Ihr Projekt.

Der einzige Laufzeiteffekt es haben könnte, ist, dass es Ihre exe/dll machen kann etwas größer und langsamer, wie hier decribed:

http://msdn.microsoft.com/en-us/library/4khtbfyf.aspx

Edit: Wie Logan erwähnt, inkrementelle Verknüpfung ist auch unvereinbar mit link time code generation - daher eine mögliche Leistungsoptimierung zu verlieren.

Sie können die inkrementelle Verlinkung für Debug-Builds verwenden, um die Entwicklung zu beschleunigen, sie jedoch für Release-Builds deaktivieren, um die Laufzeitleistung zu verbessern.

Verzögerung geladen DLLs kann sein, was Sie denken an:

http://msdn.microsoft.com/en-us/library/151kt790.aspx

+0

Ah, ich dachte, Linker hätten das immer getan! Also wird das "incremental linking" abschalten, damit der Linker jedes Mal alles von Grund auf neu verknüpft? – Russel

+6

"In der Praxis ist die Wirkung davon wahrscheinlich nicht besorgniserregend." Es ist wahrscheinlich erwähnenswert, dass, während der Unterschied zwischen "normalem" Linking und inkrementellem Linking zur Laufzeit nicht so leistungsfähig ist, das inkrementelle Linking nicht mit der Link-Timecode-Generierung kompatibel ist, was zu einem drastischen Leistungsunterschied führen kann. –

+2

@Russel: Ja wird es. @Logan: Danke, ich habe meine Antwort aktualisiert. –

10

Auch ganz wichtig ist, inkrementelle Link ist eine Voraussetzung für Edit&Continue - possibily Ihren Code zu bearbeiten und im laufenden Betrieb neu kompilieren, ohne neu starten.

Es ist also eine gute Sache, auf Debug-Builds zu haben, aber nicht Builds zu veröffentlichen.