2010-07-28 10 views
84

J'ai regardé Microsoft MSDN et tout autour du Web, mais je n'ai toujours pas pu avoir une très bonne idée de ce que c'est. Cela signifie-t-il que le programme terminé charge les DLL à des moments différents au cours de son exécution, comme cela a été le cas pour tous à la fois au lancement?Qu'est-ce que "la liaison incrémentale"?

Suis-je complètement à l'écart? :)

Répondre

97

Le lien consiste à regrouper tous les fichiers .obj construits à partir de vos fichiers source, ainsi que tous les fichiers .lib que vous référencez, dans votre sortie (par exemple .exe ou .dll).

Sans liaison incrémentielle, cela doit être fait à partir de zéro à chaque fois.

La liaison incrémentielle lie votre fichier exe/dll de manière à ce que l'éditeur de liens puisse mettre à jour l'exe/dll existante lorsque vous effectuez une petite modification et recompilez. Par conséquent, la liaison incrémentielle accélère la compilation et le lien de votre projet.

Le seul effet de l'exécution, il pourrait avoir est qu'il peut rendre votre exe/dll légèrement plus grand et plus lent, comme decribed ici:

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

Edit: Comme mentionné par Logan, la liaison incrémentielle est également incompatible avec link time code generation - perdant ainsi une possible optimisation des performances. Vous pouvez utiliser la liaison incrémentielle pour les versions de débogage afin d'accélérer le développement, mais la désactiver pour les versions de version afin d'améliorer les performances d'exécution.

retard chargé des DLL peut être ce que vous pensez:

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

+0

Ah, je pensais que les linkers le faisaient toujours de toute façon! Donc, en fermant la «liaison incrémentale», l'éditeur de liens reliera tout à partir de zéro à chaque fois? – Russel

+6

"En pratique, l'effet de cela ne vaut probablement pas la peine de s'inquiéter." il vaut probablement la peine de mentionner que si la différence entre la liaison "normale" et la liaison incrémentielle n'est pas très bonne au moment de l'exécution, la liaison incrémentielle est incompatible avec la génération de code temporel de liaison qui peut faire une différence drastique. –

+2

@Russel: Oui, ça va. @Logan: Merci, j'ai mis à jour ma réponse. –

10

En outre, tout à fait important, lien supplémentaire est une condition sine qua non pour Edit&Continue - possibily pour modifier votre code et recompiler à la volée, sans redémarrer.

C'est donc une bonne chose d'avoir des versions de débogage, mais pas de versions.

Questions connexes