2010-06-23 22 views
19

aujourd'hui, j'ai découvert que la bibliothèque statique compilée je travaille sur est beaucoup plus grande en mode version que dans Déboguer. Je l'ai trouvé très surprenant, car la plupart du temps le contraire se produit (pour autant que je sache).La bibliothèque statique en mode de libération beaucoup plus grande que la version en mode débogage

La taille en mode débogage est légèrement supérieure à 3 Mo (c'est un projet assez important), mais en version, elle atteint 6,5 Mo. Quelqu'un peut-il me dire quelle pourrait être la raison de cela? J'utilise les paramètres habituels Visual Studio (2008) pour un projet de bibliothèque statique, presque rien changé dans les paramètres de configuration de construction. En version, j'utilise/O2 et "Favorize size or speed" est réglé sur "Ni". Est-ce que le/O2 ("Maximize speed") pourrait faire en sorte que le .lib final soit plus grand que la version de débogage avec toutes les informations de débogage?

EDIT: Informations complémentaires:
Debug:
- Optimisation du programme complet: Non
- Permet la liaison de niveau de fonction: Non

sortie:
- toute l'optimisation du programme: lien Activer temps génération de code
- activer la liaison au niveau de la fonction: Oui

+1

Qu'en est-il "toute l'optimisation des programmes" et "niveau de la fonction" reliant les paramètres dans les deux configurations? – sharptooth

+0

Mise à jour de l'info. – PeterK

Répondre

28

La différence est spécifiquement due à la génération de code de lien-temps. Lisez le chapitre Génération du code temporel dans Compilers - What Every Programmer Should Know About Compiler Optimizations sur MSDN - il indique essentiellement que lorsque LTCG est activé, le compilateur génère beaucoup plus de données qui sont stockées dans la bibliothèque statique afin que l'éditeur de liens puisse utiliser ces données supplémentaires pour générer un meilleur code machine. liant le fichier exécutable.

Étant donné que LTCG est désactivé dans la configuration de débogage, la bibliothèque produite est sensiblement plus petite car elle ne dispose pas de ces données supplémentaires.

PS: Original Link (not working at 11/09/2015)

+3

Merci, cela a beaucoup expliqué! – PeterK

0

Personnellement, je n'ai jamais vu de connexion Le PDB est plus grand qu'un PDB de débogage. Même chose pour les LIBs.

1

L'optimisation pourrait être le problème ici, notamment les fonctions créées automatiquement inline seront plus grandes mais plus rapides dans la version que le débogage.