GCC enttäusch mich...



  • Also ich bin von GCC etwas enttäuscht. Ich habe mir neue Version geholt (MinGW) und dann gabe ich ausprobiert. Wärend früher die EXE-Größe bei leeren Progs 3KB war und mit paar Basis-Inkludes ~90KB war. Ist bereits jetzt eine leere EXE ~11KB groß und mit paar Inkludes schon ~200KB. Normalerweise sollen die das immer besser machen (sollte man meinen) - aber genau das Gegenteil ist da.

    206KB-EXE:

    #include <iostream.h>
    #include <stdlib.h>
    int main()
    {
    system("PAUSE");
    return 0;
    }

    Ich habe schon Parameter -O1, -O2, -O3, Os probiert - es gilft absolut gar nix und Größe bleibt immer gleich... Wie kann ich die EXE verkleinern?



  • Das kenn ich. Zumindest für <= 64K Demos würde ich auch den alten GCC verwenden.
    Mit dem 2.9er ging ein Fenster + OpenGL init + minimale Geometrie in <= 4kb.



  • So ein Sch... ich verstehe es einfach nicht warum das nicht mehr optimiert wird... Wenn die keine Lust haben GCC weiterzuentwickeln, dann sollen die es seinlassen (bei 2.9). Das ist einfach eine Verschlimmverbesserung... 😞

    Bald kann man gleich VB nehmen, wo zich MB's an Librarys integriert werden...



  • bei längeren programmen fällt das doch kaum noch auf



  • #include <iostream.h>
    #include <stdlib.h>

    http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=iostream#Answ

    Wenn die keine Lust haben GCC weiterzuentwickeln, dann sollen die es seinlassen (bei 2.9).

    halt! Nicht nur, dass diese Feststellung schwachsinn ist, da der GCC ja weiterentwickelt wurde, sonst wären die Binarys ja noch gleich groß 😉

    Kann ich deine Beobachtung nicht nachvollziehen und das Problem liegt wohl eher beim MinGW Port

    > cat leer.cc
    int main(void) { }
    > g++ -Os -o leer leer.cc
    > ls -hl leer
    -rwxr-xr-x    1 xxx     xxx         4,1K 2003-05-26 17:44 leer
    > g++ -v
    #ausgabe gekürzt :)
    gcc version 3.2.3 20030415 (Debian prerelease)
    

    und beim includieren von iostream

    > cat iostr.cc
    #include <iostream>
    
    int main() { }
    > g++ -Os -o iostr iostr.cc
    > ls -lh iostr
    -rwxr-xr-x    1 xxx     xxx         5,2K 2003-05-26 17:47 iostr
    


  • und bei der benutzung von cout?



  • Hi,

    mit cout:

    palm-man@saturn:/tmp$ gcc -v
    ...
    gcc version 3.2.3 20030331 (Debian prerelease)
    palm-man@saturn:/tmp$ cat > test.cpp
    #include <iostream>
    int main() { std::cout << "moin!" << std::endl; }
    palm-man@saturn:/tmp$ g++ test.cpp -o test -Os
    palm-man@saturn:/tmp$ ls -l
    insgesamt 2
    -rwxr-xr-x 1 palm-man palm-man 5956 2003-05-26 18:33 test
    -rw-r--r-- 1 palm-man palm-man 70 2003-05-26 18:33 test.cpp

    Also gibts doch keinen Grund, sich drüber zu beklagen?!



  • Naja... Du hast sicher Linux (sieht halt so aus) - Bei MinGW werden einfach gigantische EXE's erzeugt. Und das regt mich schon auf - wahrscheinlich werden ungleiche GCC-Sources für Win/Linux genommen oder was weiß ich...



  • Scheint wirklich nur bei MingW so zu sein. Bei dem komm ich fast nie unter 200k.
    Hab jetzt so ein minimalteil unter Linux probiert, und es ist echt winzig 🙂



  • 200k sind noch recht klein, bei Verwendung der neuen DevCPP 5 beta IDE (auch MinGW Portierung der GCC) komme ich bei einem "Hello-World" Programm auf ca 400k.
    Irgendetwas klemmt an MinGW.



  • 400 ist mit debug infos

    200 ist die normale groesse - das sind die kosten der iostreams -> der mingw linkt ja statisch, deswegen kann er keine 4KB dateien erzeugen, denn da wird die ganze runtime lib dynamisch gelinkt.

    aber wenn man ein programm weiter gibt, wird man sowieso statisch linken.



  • Nicht für nen Demo Contest. Wenn man weiß, die nötigen Libs sind vorhanden.



  • Hi

    der MinGW Benuzt nicht das Standart Exe Format von DOS sonder das Exe-PE format von windows da nur die Exe Hearder über 50k is dann kommt noch der Resource teil der compiler füllt ein teil mit resource und zeug die Windows NT/2000/XP Braucht um ausfüren zu können bestimmten shell.dll, Debug.dll , Kernel.dll und und und .....



  • früher waren EXE's auch kleiner nd es hat funktioniert...



  • Hmm, schon mal ein "strip myexe.exe" versucht? Die Symboltabelle ist halt relativ gross.
    Bei mir sind die gestripten Dateien wirklich klein, manchmal sogar kleiner als die von VC6. (Ueber das sogar laesst sich streiten...)



  • bei mir ist ein mit der neuesten version von Dec-C++ erstelltes (leeres) SDL/OGL projekt (bzw. die exe) "nur" 103KB groß...


Anmelden zum Antworten