Compiler erzeugt riesige .exe-Dateien
-
Hallo,
ich arbeite mit der DevC++ 5.0-IDE von Bloodshed unter dem Betriebssystem Windows XP. Der integrierte Mingw-Compiler macht mir aus den kleinen .cpp-Dateien (Source-Code max. 100 Zeilen) riesige .exe-Dateien (alle ca. 0,5MB!). Ist das unabänderlich?
Wenn ja, dann frage ich mich aber, warum so viele andere aus ihrem Source-Code schlanke .exe-Dateien machen konnten … Da muss es doch eine Lösung geben?
-
Da spielen mehrere Faktoren eine Rolle.
Hast du eine Release- oder Debug-Variante compiliert? Debug-EXEs haben naturbedingt eine größere Größe.
Welche Compiler-Version hast du? Je aktueller der Compiler, um so besser kann er z.B. ungenutzten (Template-)Code aus der Release-Variante eleminieren.
Und natürlich hängt es auch davon ab, welche Libs und Headers du benutzt. Z.B. ist <iostream> schon seeehr umfangreich. Da tut dein eigener Code nicht viel zur Sache.
-
Alexander Rahm schrieb:
Hallo,
ich arbeite mit der DevC++ 5.0-IDE von Bloodshed unter dem Betriebssystem Windows XP. Der integrierte Mingw-Compiler macht mir aus den kleinen .cpp-Dateien (Source-Code max. 100 Zeilen) riesige .exe-Dateien (alle ca. 0,5MB!). Ist das unabänderlich?Nein, das kann man ändern. Der g++ hat dafür ein paar Parameter. Schau dir mal Abschnitt 3.10 der gcc Manual an (ich glaub ein Parameter für den g++ war -Os).
Wenn ja, dann frage ich mich aber, warum so viele andere aus ihrem Source-Code schlanke .exe-Dateien machen konnten … Da muss es doch eine Lösung geben?
Hm, als ich mal ein etwas größeres Gtkmm Projekt (5-6k Zeilen) kompilierte, war die exe 3 MB groß! Ich hab dann die Parameter angepasst und noch das Programm strip aufgerufen (entfernt Debugging-Symbole), jetzt hat die exe nur noch um die 600-800kb
MfG
GPC
-
-
-Os lässt beim optimieren Optimierungen weg, die das Binäry vergrößern
-s führt automatisch ein strip aus (und entfernt unnötige Symbole)
-fomit-frame-pointer macht den Code auch um einiges kompakterAnsonsten ist das Problem, dass du unter Windows die ganzen Libraries statisch linkst. Hier hilft es kleinere Libraries zu benutzen. Aber der Overhead ist konstant und vermutlich in den meisten Fällen vernachlässigbar.
-
Alexander Rahm schrieb:
Dateien (Source-Code max. 100 Zeilen) riesige .exe-Dateien (alle ca. 0,5MB!). Ist das unabänderlich?
mingw macht bei mir aus 110 zeilen 22k.
ups, mal strippen.
7680 byte.
würde ich exceptions benutzen, kämen wohl noch 20k dazu.
würde ich virtuelle funktionen benutzen, noch ein wenig und die exceptions.
würde ich <iostream> benutzen, wären die üblichen 250k weg.liegt kaum am compiler, eher an <iostream>. und die muß wohl so sein.
-
LordJaxom schrieb:
Ist auf Größe zu optimieren keine Optimierung?