Pourquoi, en cpp, une dll en mode débogage est X10 plus grande que la version officielle alors qu'en .Net, elles ont presque la même taille ?
Réponses
Trop de publicités?Pour déboguer un programme C++, de nombreuses informations supplémentaires doivent être conservées dans la DLL afin que le débogueur puisse connaître le code au moment de l'exécution. Le C++ n'a pas d'exigence d'exécution pour pouvoir inspecter le code, contrairement au C# qui permet une inspection étendue à l'exécution, également connue sous le nom de réflexion. Ces informations sont présentes en C#, que l'on utilise le mode debug ou le mode release.
De plus, le C++ est généralement compilé directement en code machine en mode release ; l'objectif du compilateur est d'optimiser le code autant que possible, c'est-à-dire de supprimer toute information et tout code superflus. En C#, le compilateur compile vers un pseudo-code qui est compilé juste à temps selon les besoins. Ce code conserve une grande partie de ce qui est nécessaire pour le débogage, que vous construisiez une version ou un débogage. A tel point qu'il est possible d'écrire un dé-compilateur pour vous rendre le code à partir d'un assemblage d'exécution.
Les DLL .Net contiennent des métadonnées qui prennent en charge la réflexion au moment de l'exécution, la sécurité des types et la sécurité d'accès au code. Les seules choses qui se trouvent dans les PDB sont les noms des variables locales et les numéros de ligne.
Alors qu'en C++, des métadonnées supplémentaires et parfois des no-ops doivent être injectés pour faciliter le débogage.
Vous voulez dire C# et non .NET. Cela dépend également de votre projet.
J'ai une DLL C++/CLI qui fait 54K en version release et 94K en debug,
et une autre qui fait 88KB en release et 124KB en debug.
Mon EXE C++/CLI qui inclut MFC fait 471KB en release et 4446KB en debug !
Et puis ma DLL C# fait 135 Ko en version déboguée et en version publiée.