2017-10-05 1 views
0

Je porte des projets de vs2010 à vs2017, mais j'ai connu un comportement très étrange: la taille de dll construit avec vs2017 est beaucoup plus grand que vs2010 un:4,636 Kb vs 595 kb (version finale) !!!!!énorme taille de dll après la migration vers vs2017

Ce que je ne faisais que:

  1. 1 exemplaire vs 2010 projet avec le test de nom
  2. test.vcxproj ouvert avec 2017 et accepter la conversion de jeu d'outils (de VS2010 à vs2017)
  3. build la DLL dans la version de sortie.

J'utilisé dumpbin pour essayer de comprendre quelque chose et je trouve que la taille des données initialisées est supérieure (valeurs hexa):

 422600 size of initialized data VS2017 
     28200 size of initialized data VS2010 

Toute idée pourquoi la différence et comment corriger? TIA

+0

liez-vous statiquement ou dynamiquement avec C-Runtime? Juste pour filtrer une possibilité que ces données proviennent de C-Runtime –

+0

@Gruffalo: lien dynamique pour les deux cas – alangab

+0

avez-vous vérifié un autre projet? –

Répondre

0

Je trouve le problème:

Il y a un comportement différent de VS2010 compilateur C++ vs vs2017 sur la façon dont le compilateur préfère initialiser les données statiques même avec la même option de compilateur d'optimisation.

J'utilise une classe boost :: lockfree, spsc_queue où vous pouvez spécifier le maximum (taille fixe) d'une file d'attente sans verrou au moment de la compilation.

boost::lockfree::spsc_queue<DBG_Data*, boost::lockfree::capacity<1024*1024> > _ringQueue; 

Avec les mêmes options de compilateur, vs 2017 produit une DLL de taille énorme. En changeant l'option d'optimisation de/O2 (vitesse) à/O1 (taille) uniquement pour la source contenant cette ligne, je réduis la taille de la DLL à des valeurs normales.