Frage zu Kompilatgröße
-
a ) Ein Hello World Programm benutzt cout.
Sprich du inkludierst <iostream>.
Da ist dann std::cout, std::cin und alle Methoden von
den Streams drin. Öffne einfach mal <iostream> und klick dich durch die Header.
Dann wirst siehst du wieviel so ein einfaches std::cout braucht.b ) Build->Select Target->Release/Debug
-
Fusel.Factor schrieb:
Öffne einfach mal <iostream> und klick dich durch die Header.
Dann wirst siehst du wieviel so ein einfaches std::cout braucht.Ich bin nur verwundert, dass andere bei gleichem Programm auf wesentlich weniger große EXE-Dateien kommen...
Fusel.Factor schrieb:
b ) Build->Select Target->Release/Debug
Ah! Das hat schon was gebracht. Die Dateien sind jetzt "nur" noch ca. 270kb groß. Aber wie schaffen es andere ein HelloWorld-Programm in eine 30kb große EXE-Datei zu packen?
-
Hello World - 28 kB mit VS6 als Release
-
Da gibt es mehrere Möglichkeiten.
- Durch dynamisches Linken, dann musst du halt immer einer dll mit dir
herumschleppen.
http://de.wikipedia.org/wiki/Dynamic_Link_Library
- Durch Optimierungen. Manche Compiler können soweit optimieren, sodass
sie wirklich nur die Funtkionen erstellen, die auch wirklich benutzt werden.
- Durch dynamisches Linken, dann musst du halt immer einer dll mit dir
-
Was machen eure Compiler denn alles bei einem HelloWorld Programm?!
Oder linkt ihr statisch?$ cat hello.cpp #include <iostream> int main() { std::cout << "Hello world!" << std::endl; return 0; } $ g++ -o hello hello.cpp && dir hello # quick and dirty -rwxr-xr-x 1 lagalopex users 8,6K 20. Aug 15:07 hello $ g++ -o hello -Os -s hello.cpp && dir hello # auf Groesse optimiert und "gestrippt" -rwxr-xr-x 1 lagalopex users 6,4K 20. Aug 15:08 hello $ g++ -o hello -ggdb hello.cpp && dir hello # Debug-Version -rwxr-xr-x 1 lagalopex users 41K 20. Aug 15:08 hello
-
In dem Contest-Thread steht auf den letzten Seiten ein Link zu Tipps wie man mit dem VC auch ein Hello World Programm mit nur 1kB hinbekommt.
-
Mich hats nur gewundert, da ich nichtmal mit der Debug Version auf 50kB komme (was immernoch Faktor 10 kleiner wäre)... und ich kann mir kaum vorstellen, dass Programme standardmäßig statisch gelinkt werden.
Aber ok
Und klar, kriegt man die Programme winzig klein. Die Frage ist nur, wie sinvoll, praktikabel und portabel es ist.
-
Habe in den Compiler-Einstellungen nun die Optionen -Os und -s aktiviert.
Programm ist immer noch 270.5kb groß...
-
Wenn ich im Codeblocks Forum lese, scheint es wirklich so zu sein, dass es statisch gelinkt wird.

-
Ich hab hier eine 6 KB exe die unter Windows einen Text aus einer Textdatei lädt und in einem Fenster mit einem Button anzeigt und dann noch ein wenig anderen Kram macht.

Kompiliert mit VC6. Alles eine Frage der Kompiler-Einstellungen ...
Ich hab grad mal nach einem Tutorial dafür gesucht aber auf die Schnelle nichts gefunden. Ich kenn Code::Blocks nicht, aber da sollte ähnliches möglich sein.
"Lernen" tut man sowas wenn man sich mit 64kb Intros befasst.