C++ Dateigröße immer > 6 kBytes

Fragen zu allen anderen Programmiersprachen.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

C++ Dateigröße immer > 6 kBytes

Beitrag von DarkDragon »

Hallo,

Va!n und ich haben uns grad gewundert warum wir die EXE mit MingW nicht unter 6 kBytes bekommen. Wir haben Debugger aus, Optimierungen voll an und es will einfach nicht unter 6 kB gehen. Wir nutzen Code::Blocks und Dev-Cpp als Entwicklungsumgebung.

Weiß jemand da mehr darüber? Wenn ich bei Google suche finde ich meist MSVC Schrott, was man überhaupt nicht auf MingW anwenden kann.

[EDIT]

Ganz vergessen:

Code: Alles auswählen

#include <windows.h>
#include <GL/gl.h>

int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)
{
    PIXELFORMATDESCRIPTOR pfd;
    pfd.cColorBits = pfd.cDepthBits = 32;
    pfd.dwFlags    = PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;

    HDC hDC = GetDC ( CreateWindow("edit", 0,
                                   WS_POPUP|WS_VISIBLE|WS_MAXIMIZE,
                                   0, 0, 0 , 0, 0, 0, 0, 0) );

    SetPixelFormat ( hDC, ChoosePixelFormat ( hDC, &pfd) , &pfd );
    wglMakeCurrent ( hDC, wglCreateContext(hDC) );

    ShowCursor(FALSE);

    do {

        glClear ( GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT );

        SwapBuffers ( hDC );
    } while ( !GetAsyncKeyState(VK_ESCAPE) );


    ExitProcess(0);

    return 0;
}
Zuletzt geändert von DarkDragon am 10.02.2007 21:05, insgesamt 1-mal geändert.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
125
Beiträge: 1322
Registriert: 19.09.2004 16:52
Wohnort: Neu Wulmstorf (Hamburg)
Kontaktdaten:

Beitrag von 125 »

Wie sieht denn der Source aus?
Bild
BildDas ist Tux. Kopiere Tux in deine Signatur und hilf ihm so auf seinem Weg zur Weltherrschaft.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

125 hat geschrieben:Wie sieht denn der Source aus?
Hab mich oben nochmal korrigiert, danke für den Hinweis.

[EDIT]
Es gibt OpenGL Demos, die sind weitaus kleiner als 6 kB ungepackt. :freak:
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Eine Exe hat für gewöhnlich diverse Informationen noch mit drine. Es gibt
halt dann Linker, die alle direkt zusammen in einen Block werfen und es
gibt halt auch Linker, die zwischen den einzelnen Blöcken etwas Platz
lassen. Denke ich mir mal :roll:, da die Strukturen ja alle mit Offsets
arbeiten....
Bild
Benutzeravatar
Vallan
Beiträge: 223
Registriert: 20.01.2006 19:34
Kontaktdaten:

Beitrag von Vallan »

Das liegt an den Includes. Wenn du alle includes die du nicht brauchst rausstreichst dann sollte das wesentlich kleiner werden.

(Glaube ich)
Benutzeravatar
125
Beiträge: 1322
Registriert: 19.09.2004 16:52
Wohnort: Neu Wulmstorf (Hamburg)
Kontaktdaten:

Beitrag von 125 »

Vallan hat geschrieben:Das liegt an den Includes. Wenn du alle includes die du nicht brauchst rausstreichst dann sollte das wesentlich kleiner werden.

(Glaube ich)
Die beiden Header die er includet braucht er...
Bild
BildDas ist Tux. Kopiere Tux in deine Signatur und hilf ihm so auf seinem Weg zur Weltherrschaft.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

125 hat geschrieben:
Vallan hat geschrieben:Das liegt an den Includes. Wenn du alle includes die du nicht brauchst rausstreichst dann sollte das wesentlich kleiner werden.

(Glaube ich)
Die beiden Header die er includet braucht er...
Und wenn ich die raus mach sinds immernoch 5,5 kB. 1-2kB Anwendungen sind ja auch möglich. Sogar mit OpenGL Funktionen.

@MVXA: Nur wie bekommt mans dann kleiner? :freak: Anderen Linker verwenden oder wie? UPX bringt ja auch alles auf ne ziemlich kompakte größe, ich würd aber gern ohne UPX schon so kleine Dateien haben (Bei PB gehts doch auch?).
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Beitrag von Thorium »

DarkDragon hat geschrieben: Nur wie bekommt mans dann kleiner? :freak: Anderen Linker verwenden oder wie? UPX bringt ja auch alles auf ne ziemlich kompakte größe, ich würd aber gern ohne UPX schon so kleine Dateien haben (Bei PB gehts doch auch?).
Also das Minimum von PB sind 2 KB, da ist dann aber auch wirklich garnix drinnen. Bei den meisten Demos, die so kleine exe'en haben wurde am PE-Format rumgedocktort. Schau mal hier. Wenn man die Formatspezifikationen kennt lässt sich die Dateigröße enorm optimieren. Allerdings muss man sich da erstmal reinarbeiten.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Thorium hat geschrieben:
DarkDragon hat geschrieben: Nur wie bekommt mans dann kleiner? :freak: Anderen Linker verwenden oder wie? UPX bringt ja auch alles auf ne ziemlich kompakte größe, ich würd aber gern ohne UPX schon so kleine Dateien haben (Bei PB gehts doch auch?).
Also das Minimum von PB sind 2 KB, da ist dann aber auch wirklich garnix drinnen. Bei den meisten Demos, die so kleine exe'en haben wurde am PE-Format rumgedocktort. Schau mal hier. Wenn man die Formatspezifikationen kennt lässt sich die Dateigröße enorm optimieren. Allerdings muss man sich da erstmal reinarbeiten.
Danke für den Tipp :-) . Aber viele Leute behaupten man könne auch ohne "rumdoktorn" mit C++ unter 5 kB kommen.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Eric
Beiträge: 303
Registriert: 05.09.2004 09:50
Wohnort: Göttingen

Beitrag von Eric »

Falls du es nicht schon machst, könntest du die Optimierung auf -Os stellen (optimiert auf Größe).
Und beim Linker kannst du noch -s angeben (entfernt einige überflüssige Sachen beim Linken)
oder alternativ die Strip.exe von MinGW benutzen. (sollte aufs gleiche hinauslaufen.)
El_Choni_work: cant't you just spit the binary data to sqlite, as you would spit a hamster into a microwave oven?
* Fangles falls off the chair laughing
Bild
Antworten