Il est presque pas de frais généraux d'avoir une DLL séparée. Fondamentalement, le premier appel à une fonction exportée à partir d'une DLL exécutera un petit bout qui fixe les adresses de fonction de sorte que les appels ultérieurs sont effectués via un seul saut à travers une table de saut. Le fonctionnement des processeurs, cette indirection supplémentaire est pratiquement gratuite.
Le "surcoût" principal est en fait un coût d'opportunité, pas un "surcoût" en soi. C'est-à-dire que les compilateurs modernes peuvent faire quelque chose appelé «optimisation de programme complet» dans laquelle le module entier (.exe ou .dll) est compilé et optimisé en même temps, au moment de la liaison. Cela signifie que le compilateur peut faire des choses comme ajuster les conventions d'appel, les fonctions inline et ainsi de suite à travers tous les fichiers .cpp dans le programme entier, plutôt que juste dans un seul fichier .cpp.
Cela peut entraîner une augmentation des performances assez agréable, pour certains types d'applications. Mais bien sûr, l'optimisation du programme entier ne peut pas se produire à travers les limites de la DLL.
Ce n'est pas tout à fait vrai, dans le cas habituel, les adresses de fonction sont fixées au fur et à mesure que le programme est chargé, pas au moment de l'exécution. Le commentaire sur l'optimisation du programme entier est mort, mais je n'ai vu aucune information sur son utilité. –
@Mark: Oui, je pense peut-être à des DLL chargées en retard ... dans tous les cas, le surcoût lui-même est faible dans les deux cas ... –