Einfacher und kleiner C++ Compiler (Windows)

3 Antworten

In DEV C++ ist meiner Meinung nach MinGW enthalten, was mehr oder weniger ein Windows Port vom GCC ist! Alternativ kannst du auch CygWin benutzen, woraum MinGW letzendlich basiert. MinGW ist von der Lizenz her vermutlich besser für dich geeignet.

Davon abgesehen sollte es auch irgendwo im DEV C++ Unterverzeichnis wo dein MinGW Compiler liegt eine strip.exe geben. (Die müsstest du dort finden, wo auch c++.exe liegt.)

Ein compiliertes "Hello World" in C++ ist gut und gerne mal 100 KB groß. (Je nach Compiler-Optimierungen und Flags.)

Mit reinem C bist du bei 10 bis 15 KB.

Mit Assembler bei etwas über 100 Byte, aber das ist hier egal. :)

Ich denke, dass was du suchst ist MinGW, was bereits in DEV C++ enthalten ist. Guck dir mal die Hilfe an, und lies die Dokumentation!

PS: Hab gerade nachgeschaut und strip.exe liegt im gleichen Verzeichnis wie gcc.exe, gdb.exe und g++.exe. Bei mir läuft DEV C++ zwar unter Linux in Wine, aber der Pfad sollte "C:\MinGW\bin\" sein.

PPS: Du könntest auch mal Clang ausprobieren! Der ist in vielen Bereichen besser als der GCC (Fehleranalyse, Geschwindigkeit, etc.), und ebenfalls kostenlos.

0

Mit Assembler bei etwas über 100 Byte ...

Bereits das EXE-Dateiformat von Windows würde die Dateigröße nach unten limitieren. Meines Wissens bekommt man durch das Dateiformat bedingt selbst mit Assembler nicht deutlich kürzere Programme als ein "Hello World" in C hin.

0
@martin7812

Normalerweise liegt das untere Limit beim PE (EXE) Format bei 4 KB. Das kann man aber leicht mit Hilfsprogrammen (wie LordPE) auf 1 KB trimmen. Dabei ist dann garantiert, dass die EXE auf allen Windows-Versionen (mindestens 98 bis 7) läuft.

Mit etwas Spielerei habe ich selbst einen kleinen Webserver, der auch ein Bild der angeschlossenen Webcam ausliefern kann, und über eine kleine GUI für die Konfiguration verfügt auf etwas über 500 Byte reduziert. Das ist deutlich mehr als "Hello World" und über die Hälfte des Codes hat nicht der eigentliche Maschinencode, sondern größtenteils Strings des Webservers ausgemacht.

Man kann den EXE-Overhead allerdings - wenn man zu 100% den Assembler benutzt um das PE/EXE Gerüst damit zu bauen (inkl. Header, Tabellen, etc.) - auf knapp über 100 Byte reduzieren, sodass am Ende ein "Hello World" wirklich nur noch so um die 130 bis 160 Byte benötigt.

0
@martin7812

Link 1: Tiny PE

Auf dieser Seite wird eine Windows EXE beschrieben, die nur 133 Byte groß ist. Ich habe aber noch eine andere Seite im Hinterkopf, die auf 127 Byte gekommen ist.

0

Der bei dev-c++ enthaltene C++-Compiler ist in der Regel der GCC.

Es handelt sich dabei um denselben (!) Compiler, der auch bei Linux dabei ist!

Das Geschwindigkeitsproblem (und das Dateigrößenproblem) liegt wahrscheinlich an den Standardlibraries (libstdc++) für Windows und nicht am Compiler.

Also sind 524 KB für ca. 30 Codezeilen unter Windows normal? Unter Linux (RPI) ist die Datei nur ca. 6 KB groß.

0
@androidfreak99

Ich denke, das hängt stark vom Compiler und den Debugging-Symbolen ab. Aber ähnliches ist mir früher auch schon aufgefallen. Bei mir waren es ca. 200 KB für eine Mini-Anwendung. :)

0
@androidfreak99

Ein einfaches "Hello World" läuft bei Linux bereits auf genau diese Größe (400 KB) raus, wenn man "statisch" compiliert.

"statisch" bedeutet, dass das Programm auf keine DLL-Dateien zugreift oder bei Windows: Dass das Programm ausschließlich auf DLL-Dateien zugreift, die bei Windows mitgeliefert werden.

Eine dynamische Compilierung hat den Nachteil, dass ein Programm unter Umständen nur bei einer ganz bestimmten Betriebssysteminstallation lauffähig ist. So kann es bei einem unter Ubuntu 8 compilierten Programm durchaus sein, dass es unter Ubuntu 12 nicht mehr läuft, da die benötigte DLL-Datei (in Linux heißen sie so-Dateien) fehlt.

Bei Windows werden die von C++ benötigten DLL-Dateien prinzipiell nicht mitgeliefert, so dass eigentlich nur zwei Möglichkeiten bleiben:

  • Die DLL-Dateien installieren und dynamisch linken; dadurch werden die Programme zwar richtig schön klein, läuft aber nur, wenn man die DLL-Datei installiert hat
  • Statisch linken; dadurch werden die Programme zwar riesengroß, aber funktionieren auch dann, wenn die DLL-Dateien nicht geladen sind.

Auf die Geschwindigkeit sollte sich das allerdings kaum auswirken. Statisch gelinkte Programme sollten sogar eher schneller laufen, da dann die DLL (Größenordnung 3 MB) nicht geladen werden muss.

1
@martin7812

Manchmal sieht man den Wald vor lauter Bäumen nicht ... das mit dem statisch / dynamisch linken ist natürlich ein Argument! Hatte ich jetzt auf die Schnelle ganz vergessen. :)

Wenn ich "Hello World" unter Linux mit GCC dynamisch linke, ist die daraus resultierende ELF-Datei 11184 Byte groß.

Wenn ich hingegen das gleiche Programm statisch linke, komme ich auf 886524 Byte. Das ist fast 80 mal so viel! :)

Nach einem "strip" liegen die Werte bei 6200 und 802856 Byte. :)

ldd sagt bei der dynamisch gelinkten Binary folgendes:

linux-vdso.so.1
libc.so.6
/lib64/ld-linux-x86-64.so.2

Also man sieht, da kommt einiges zusammen! :)

0

Im Internet gibts keinen richtigen hab letztes mal auch schon Jahre gesucht

Was möchtest Du wissen?