visual studio 8 vs. gcc (warum unterscheidet sich die größe der exe)



  • -Os -s ist schon die richtige Idee, aber zusätzlich kann auch der Linker optimieren.

    Ähnlich dem Compiler kann man auch dem Linker z.B. -O2 als Paramter übergeben, das macht insbesondere STL deutlich kleiner. Siehe man ld für eine komplette Beschreibung.



  • Das ist ein tolles Rätzelraten.

    Zeig mal den Source und gib die Parameter mit an, dann vergleichen wir. SO hat das überhaupt keinen Sinn! 👎



  • strip wäre auch eine gute Idee.



  • Ringding schrieb:

    strip wäre auch eine gute Idee.

    schwein 😡



  • Hallo,

    im C++ Forum hatten wir doch vor einem Monat oder so n ähnliches Thema, damals haben wir die g++ binaries auf die gleiche Größe wie die executables vom VC8 bekommen. Sucht halt mal danach.

    Ponto schrieb:

    kingruedi schrieb:

    Beim GCC die Optionen -Os -s benutzen und die Binaries werden auf größe Optimiert.

    Hatte das bei dir mal was gebracht, außer extrem langsamere Binaries.

    Also ich konnte bisher keinen wirklichen Performance-Verlust bemerken, aber die Binaries wurden wirklich kleiner

    Mfg

    GPC



  • Ringding schrieb:

    strip wäre auch eine gute Idee.

    Oh, hat schon jemand geschrieben (Steven). Sorry, hab's übersehen.



  • Hallo Leutz. Ich hab das auch mal ausprobiert und ich komme auf 5.6 kByte für meine hello.exe unter Windows.

    hello.c

    #include <stdio.h>
    
    int main(){
      printf("Hello World");
      return 0;
    }
    

    Kompiliert habe ich in der Konsole mit dem GCC 3.4.2 von MinGW und danach die Exe nochmals mit strip bearbeitet.

    >gcc -o hello.exe hello.c
    >strip hello.exe
    


  • Optimizer schrieb:

    Es ist auch aus technischen Gründen eigentlich schwer möglich, Template-Klassen und -Funktionen in DLLs auszulagern, weil man ja nicht im vornherein weiß, mit welchen Template-Parametern etwas instanziert wird. Man könnte bestenfalls noch die Instanzen dieser Templates, die man für sein Programm benutzt, auslagern, aber damit wäre dann nicht wirklich was gewonnen.

    Man könnte ohne weiteres cout, cin, fstream, stringstream in eine dynamische Bibliothek packen da sie die einzigen gebräuchlichen Instancen sind dieser Templates sind. Für den äußerst unwahrscheinlichen Fall, dass mal jemand eine andere Instance benutzt (mal abgesehen von den wide Versionen) kannst du die ja immer noch statisch linken. Das gleiche gilt für std::string.


Anmelden zum Antworten