Ergebnis 1 bis 13 von 13

Thema: exe Größe

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1

    exe Größe

    Mir ist aufgefallen, dass die exen der Programme, die ich mit Dev-C++ erstellt habe 1,21 MB groß sind und die gleichen Programme, wenn ich sie mit Microsoft Visual C++ 6.0 erstellt habe nur ein paar kb.

    Warum das?

  2. #2
    Weil in den EXE-Dateien verschiedene DLLs eingebunden werden, die auch unterschiedlich groß sind. Und das unabhängig davon, ob die DLL überhaupt komplett gebraucht wird. Das Gleiche beobachte ich auch bei meinen Programmen: Wenn ich in QBasic eine EXE erstelle, ist diese immer mindestens 5 KB groß, während in Visual Basic ein im Prinzip gleiches Programm fast 1,5 MB verbraucht... also 300mal größer als eigentlich nötig O_o .

    Geändert von Manuel (14.08.2004 um 07:08 Uhr)

  3. #3
    Hello World mit:

    Virsual Basic (inclusive DLLs etc) 1,5 MB
    Borland Delphi 400 KB
    Pure Basic etwa 6 KB

    Quelle pure-basic Webseite

  4. #4
    Das liegt unter anderem daran, dass der MS Compiler u.a. auf Größe optimiert, und das von Haus aus, und der GCC (bitte, Dev-C++ ist nur ein schön bunter Editor...) auf Geschwindigkeit, und erst mit den nötigen Flags auf Größe optimiert (frag mich allerdings nicht, wie die jetzt heissen... man g++ dürfte da Aufschluss geben...)

  5. #5
    Man kann die .exe files auch hinterher schön mit Aspack packen, verkleinert oft um mehr als 50% und die Geschwindigkeit verändert sich nicht merklich

  6. #6
    Du kannst versuchen, gcc mit dem Flag -O* aufzurufen, wobei * eine Zahl ist. -O3 sollte schon etwas Kleineres hervorbringen, kompiliert aber auch länger.

    Es könnte auch eine gute Idee sein, die Binary nach dem Kompilieren mit strip zu bearbeiten.

    Ich habe mal "Hello World" vier mal kompiliert und teilweise gestript. Hier die Ergebnisse (Anm: Unter Linux, deshalb sind die Binaries von Anfang an kleiner)
    Code:
    1.    Ohne Optimierung, ohne strip: 6445 Byte (100%)
    2.    Ohne Optimierung,  mit strip: 4056 Byte ( 63%)
    3. Optimierung mit -O3, ohne strip: 6389 Byte ( 99%)
    4. Optimierung mit -O3,  mit strip: 4000 Byte ( 62%)
    BTW, erstellt MSVC überhaupt komplett lauffähige Binaries? AFAIK verlassen die sich stark auf eine C-Runtime, die mit Windows kommt. Das könnte ein Grund sein, warum sie so klein sind...

    BTW2, UPX ist auch ein brauchbarer Packer für Binaries.

    Geändert von Jesus_666 (14.08.2004 um 18:39 Uhr)

  7. #7
    Hm, da es hier ja um EXE Grössen geht und ich keinen neuen Thread erstellen will, missbrauche ich diesen mal für meine Frage.

    Mich würde mal interessieren wie man solch "Präsentationen" wie diese 64kb grosse Zoom 3 Demo so klein kriegen kann ^_-. Da muss man ja bitweise coden, und da würde mir spontan nur Assembler in den Sinn kommen, vorallem um den OpenGL Teil so klein wie möglich zu halten. Habe da aber wenig Erfahrung mit. Ich frage aus reinem Interesse.



    au revoir ...

  8. #8
    das ganze ist nicht openGL sondern DirectX9

    Das ganze IST in Assembler gecoded (Assembly ist wohl die groesste Assemblermesse) und hier sind echte Profis am Werk.

    Die haben extra neue Kompressionsalgorithmen entwickelt, um z.B. 70MB Musikdaten in 5.5Kb zu pressen .... ich hab keine Ahnung, wie die das gemacht haben ...

    Im prinzip lebt das ganze davon, dass alles moegliche zur laufzeit berechnet wird, damit die die daten nicht schon vorher reinstecken muessen. Die musik wird ueber einen just in time softwaresynthesizer zur laufzeit zusammengebaut, aehnlich den klassischen trackerformaten.

    Nichts desto trotz ist sowas eine echte meisterleistung, und ich geh wohl recht in der annahme, dass sowas vonuns hier keiner ohne weiteres auf die beine stellen kann ...

  9. #9
    Nur so nebenher gesagt, ich weiß zwar nicht ob die Programme von Visual C++ ohne Runtime.dlls lauffähig sind, und deshalb auch nur 6 KB groß sind, aber unter PureBasic kann ich 4,5 KB Große Hello-Wolrd Programme erstellen welche komplett auf Amiga, Linux und WIndows portierbar sind. Ohne jegliche Runtimes. Es wäre also auch möglich, das MSVC++ auch ohne Runtime recht klein ist, PB ist es ja auch.

  10. #10
    na ja .. trotzdem ist Assembler einfach das kleinste, was du erzeugen kannst ...

    Mein ebend geschriebenes "Hallo Welt." Programm ist gerade mal 29 Byte gross. Zugegeben, es ist eine COM Datei, aber im Prinzip koennte man nen header davorsetzen, ein paar byte dazuschreiben, und haette eine Exe.

    Hier einmal der Quellcode fuer nasm

    Code:
    ;Hello World Programm
      ORG 100h ; COM File
    
    EntryPoint: 
      mov si, message1	; Addresse von String Message nach SI
     .startloop
      lodsb 		; Byte laden
      or al,al		; ist = 0 ?
      jz short .endloop	; wenn 0, dann ende
      mov ah,0x0E
      int 0x10		; Bios-Interrupt
      jmp short .startloop	; naechstes Zeichen
     .endloop
      ret			; Ende COM File
    
    DataSection:
      message1 db "Hallo Welt.",13,10,0
    Wie man sieht hab ich auf BIOS-Routinen zurueckgegriffen und nicht auf die lausige DOS-Routine int 21h. Wer benutzt schon $ als terminales Zeichen ? .. mein Prog handhabt so wenigstens Null-terminierte Strings ...
    Ausserdem sollte so der Assemblercode auch recht leicht auf linux portierbar sein ...

    und fuer alle, die es interessiert, hier der Maschienencode mit ASM-Entsprechung

    Code:
    Pos      Maschienencode          ASM-Code
    00000000 BE0F01                  MOV SI,word 0x010F
    00000003 AC                      LODSB 
    00000004 08C0                    OR AL,AL
    00000006 7406                    JE 0x0000000E
    00000008 B40E                    MOV AH,byte 0x0E
    0000000A CD10                    INT byte 0x10
    0000000C EBF5                    JMP 0x00000003
    0000000E C3                      RETN 
    0000000F 48                      byte 0x48 'H'
    00000010 61                      byte 0x61 'a'
    00000011 6C                      byte 0x6C 'l'
    00000012 6C                      byte 0x6C 'l'
    00000013 6F                      byte 0x6F 'o'
    00000014 20                      byte 0x20 ' '
    00000015 57                      byte 0x57 'W'
    00000016 65                      byte 0x65 'e'
    00000017 6C                      byte 0x6C 'l'
    00000018 74                      byte 0x74 't'
    00000019 2E                      byte 0x2E '.'
    0000001A 0D                      byte 0x0D CR
    0000001B 0A                      byte 0x0A LF
    0000001C 00                      byte 0x00 NULL
    Wenn man es genau betrachtet, ist das programm lediglich 15 Byte gross, der Rest sind ja die auszugebenden Daten ^^

  11. #11

    Users Awaiting Email Confirmation

    es "interesiert" sogar SO viele Leute das sie gleich mal hier hintendran geschrieben haben
    *guckguck*
    öhm oder auch nicht ^^
    ich glaube ich hätte den int 21h Interrupt benutzt , hatte sowie so nur ein bischen ASM ^^
    aber um nochmal auf die 64kb dinger zurück zukommen die sind meistens sogar in C++ geschireben die Kbyte oder gar byte großen o_O
    sind dann in ASM... die Assembly ist echt schon krass
    und ja wir sind alle unwürdig :
    zitat
    "...
    Nichts desto trotz ist sowas eine echte meisterleistung, und ich geh wohl recht in der annahme, dass sowas vonuns hier keiner ohne weiteres auf die beine stellen kann ..."
    *g*
    -> tut mir Leid ein bsichen Ironie muss mal ab und zu sein , ok? ^^°
    ah ja wer noch mehr nette kleine Demos sucht kann ja hier gucken :
    http://www.scene.org/
    ich mag auch ein paar der größeren
    036-zeitmaschine von farbrausch gehört zu meinen favoriten
    MFG Shin Gouki

    Geändert von Shin Gouki (02.09.2004 um 16:00 Uhr)

  12. #12
    wenn du wert auf kleine exe dateien legst, kannst du in den linker options verhindern, dass die dll mitgelinkt werden, allerdings müssen die dlls auf dem system zur verfügung stehen. dh entweder an einem ort wo die umgebungsvariabel pfad richtig gesetzt ist oder sie muss im gleichen dir sein wie die exe.
    übrigens kannst du bei devcpp unter den optionen optimierungen vornehmen, so dass du auch kleine exes bekommst.

  13. #13
    Zitat Zitat
    übrigens kannst du bei devcpp unter den optionen optimierungen vornehmen, so dass du auch kleine exes bekommst.
    Muss ich mal ausprobieren.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •