Qu'est-ce que la «liaison incrémentielle»?


105

J'ai regardé le MSDN de Microsoft et tout autour du Web, mais je n'ai toujours pas été en mesure de me faire une très bonne idée de ce que c'est.

Cela signifie-t-il que le programme terminé charge les DLL à différents moments de son exécution, comme il est apposé à tous en même temps lors du lancement?

Suis-je totalement éloigné? :)


1
J'ai ajouté une réponse pour GNU ld mais elle a été supprimée, en voici une similaire: stackoverflow.com/questions/29391965/…
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Il a été supprimé car Copier, Coller et Diverger est mauvais - quelle que soit la qualité du contenu en.wikipedia.org/wiki/Don%27t_repeat_yourself
MarcH

Réponses:


122

La liaison implique de regrouper tous les fichiers .obj créés à 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 exe / dll d'une manière qui permet à l'éditeur de liens de mettre à jour plus facilement l'exe / dll existant lorsque vous effectuez un petit changement et recompilez.

Ainsi, la liaison incrémentielle accélère la compilation et la liaison de votre projet.

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

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

Edit: Comme mentionné par Logan, la liaison incrémentielle est également incompatible avec la génération de code temporel de liaison - perdant ainsi une éventuelle optimisation des performances.

Vous souhaiterez peut-être utiliser la liaison incrémentielle pour les versions de débogage afin d'accélérer le développement, mais désactivez-la pour les versions de version afin d'améliorer les performances d'exécution.

Les DLL chargées en différé peuvent être ce à quoi vous pensez:

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


Ah, je pensais que les linkers faisaient toujours ça de toute façon! Donc, la désactivation incremental linkingfera que l'éditeur de liens liera tout de zéro à chaque fois?
Russel

6
"Dans la pratique, cet effet 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 peut-être pas très performante au moment de l'exécution, la liaison incrémentielle est incompatible avec la génération de code temporel de liaison, ce qui peut faire une différence de performances drastique.
Logan Capaldo

2
@Russel: Oui, ce sera le cas. @Logan: Merci, j'ai mis à jour ma réponse.
Saxon Druce

Cela signifie-t-il que nous devrions désactiver cette option pour les versions de production?
RBT

1
@RBT, oui, vous devez.
Ajay

15

De plus, un lien incrémentiel est un prérequis pour Edit&Continue- éventuellement éditer votre code et le recompiler à la volée, sans redémarrer.

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.