Frage

Heute habe ich herausgefunden, dass die kompilierte statische Bibliothek ich arbeite ist viel größer in Freigabe Modus als in Debug . Ich fand es sehr überraschend, da die meiste Zeit genau das Gegenteil passiert (soweit ich das beurteilen kann).

Die Größe im Debug-Modus ist etwas mehr als 3 MB (es ist ein ziemlich großes Projekt), aber in Release geht es zu 6,5 MB auf. Kann mir jemand sagen, was der Grund dafür sein könnte? Ich bin mit dem üblichen Visual Studio (2008) Einstellungen für ein statisches Bibliothek-Projekt, so gut wie nichts in den Build-Konfigurationseinstellungen geändert. In Release, ich verwende / O2 und „Favor Größe oder Geschwindigkeit“ auf „Weder“. Könnte die / O2 ( „Maximize speed“) Ursache der letzten LIB in ihm so viel größer als die Debug-Version mit allen Debugging-Informationen sein?

EDIT: Zusätzliche Informationen:
Debug:
- ganz Programmoptimierung: Nein
- Freigabefunktion Ebene Verknüpfung: Nein

Release:
- ganze Programmoptimierung: Link-Zeitcodegenerierung
aktivieren - Freigabefunktion Ebene verknüpfen: Ja

War es hilfreich?

Lösung

Der Unterschied ist, speziell wegen der Link-Zeitcodegenerierung. Lesen Sie das Kapitel Link-Zeitcodegenerierung in Compiler - Was jeder Programmierer wissen sollten über Compiler-Optimierungen auf MSDN - es sagt im Grunde, dass mit LTCG auf dem Compiler gedreht viel mehr Daten erzeugt, die in die statischen Bibliothek gepackt wird, so dass der Linker, dass zusätzliche Daten zur Erzeugung von besserem Maschinencode tatsächlich verwenden kann, während die ausführbare Datei verknüpfen <. / p>

Da Sie LTCG haben off in Debug-Konfiguration die erzeugte Bibliothek ist deutlich kleiner, da es nicht, dass zusätzliche Daten hat.

PS: Original-Link (nicht bei 2015.11.09 Arbeits)

Andere Tipps

Die Optimierung könnte das Problem hier sein, insbesondere automatisch erstellt inline Funktionen wird größer sein, aber schneller in Version als debug.

Ich persönlich habe noch nie ein Release PDB größer als eine Debug-PDB gesehen. Gleicher Deal für LIBs.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top