Dateigröße nach Compilieren
-
Hallo alle zusammen,
weiß einer ob es möglich ist die Dateigröße nach dem Compiliervorgang zu reduzieren? Ich benutze Dev-C++.
Standardmäßig hat dieser Quelltext:
#include <iostream> int main(int argc, char *argv[]) { cout << "123"; return 0; }eine größe von knapp 500KB
Ich weiß dass man mit strip die Debuginfos rausnehmen kann, dann sind es ca 200-300KB.Ist es möglich dem Linker/Präprozessor mitzuteilen, dass er nur die benutzen Funktionen und Konstrukte mit einbeziehen soll? Das würde doch die Dateigröße stark veringern.
Viele Grüsse
PlainText
-
debug optionen weglassen (haben manche IDEs per default an) und ne hohe optimierung (O2+) wählen.
-
Dev-C++ verwendet einen alten gcc/g++ -s bewirkt da wunder. (Auch ein g++ Update hilft manchmal weiter, ich hab einen modifizierten 4.2, der Unterschied ist schon manchmal sehr deutlich
-
Hallo, danke für eure Hilfe.
Also -s bewirkt bei mir nichts. Ich habe nun bei Dev-C++ unter
Projekt->Projekt Optionen->Linker
"Exe Entfernen" aktiviert, was im Original Strip Exe heißt und bedeutet, dass die Debug-Infos rausgenommen werden.
Des weiteren muss man wohl oder übel auf iostream verzichten, mache es nun so#include <stdio.h> using namespace std; int main(int argc, char *argv[]) { printf("HELLO"); return 0; }So wird die Datei 5,5 KB groß.
Schade eigentlich, dass man auf cout etc... verzichten muss
Grüsse
PlainText
-
du verzichtest wegen kilobytes (im zeitalter der terabyte festplatten und blu ray discs) auf standardkonforme programmierung?
-
wenns dir schon auf jedes byte ankommt, dann lass die libs gleich ganz weg und bau die ausgabe selbst nach. das sind 5 zeilen assembler.
-
abend schrieb:
du verzichtest wegen kilobytes (im zeitalter der terabyte festplatten und blu ray discs) auf standardkonforme programmierung?
Was soll daran standardinkonform sein?
-
audacia schrieb:
abend schrieb:
du verzichtest wegen kilobytes (im zeitalter der terabyte festplatten und blu ray discs) auf standardkonforme programmierung?
Was soll daran standardinkonform sein?
Gibt halt manche Leute die glauben dass printf nicht zur C++ Standardlib gehört.
@PlainText: klar, iostreams ist meist ein Monster - hat auch leider einige Dependencies, z.B. den ganzen locale Quark. Irgendwie doof dass das nicht besser getrennt wurde...
-
OK, printf() ist im C++ Standard, aber auch nur als Erbe aus C-Tagen. Damit ist es womöglich standardkonform - allerdings auch unflexibel, kompliziert und fehleranfällig (im Vergleich zu den C++ IOStreams).
-
Hallo

du verzichtest wegen kilobytes (im zeitalter der terabyte festplatten und blu ray discs) auf standardkonforme programmierung?
Mit den Terabytes hast du vermutlich recht, aber heutzutage kann es auch schonmal dazu kommen, dass man Diskettenproggies schreiben will
Im Endeffekt stimmt's. Aber mir geht es auch um das Warum. Jetzt weiß ich warum da so viele bytes verschwendet werden. Allein die Debug Infos sind für mich unnütz (bei kleinen Projekten).wenns dir schon auf jedes Byte ankommt, dann lass die libs gleich ganz weg und bau die ausgabe selbst nach. das sind 5 zeilen assembler.
Dazu kommen aber noch ein paar Zeilen für die Eingabe, und dann noch ein paar Zeilen für die Dateioperationen, da kann ich doch gleich zu NASM/MASM greifen

Und wenn ich dann noch die WinAPI benutzen will...klar, iostreams ist meist ein Monster - hat auch leider einige Dependencies, z.B. den ganzen locale Quark. Irgendwie doof dass das nicht besser getrennt wurde...
Ich denke solange man kein 10MB+ Projekt vor sich hat, ist das u.U. schon nervig. Muss man mit leben, ist ja kein Weltuntergang.

Grüsse
PlainText