Windows Programme in C
-
hallo..
warum sind eigentlich die windows programme, wenn man sie in C schreibt immer so groß ? der eigentliche code ist ja meinetwegen nicht größer als 4kb..
aber aus 4kb werden meistens 40kb bis 70kb, obwohl ich nicht viel code dastehen hat.
liegt das alles nur an der import tabelle ?
ich kann mir net vorstellen, dass der linker alle winapi funktionen die es gibt in die import tabelle einfügt (für die dlls).
und das include geklumpse aus den headers und die prototypen sind ja eh kein code.wenn ich dagegen in asm eine exe erstelle, lande ich bei 4kb.
woran liegt das hauptsächlich ?
mfg
-
Hammer schrieb:
woran liegt das hauptsächlich?
An der Code-Optimierung?
-
äähm, gut.. aber ich kann mir net vorstellen, dass der c-compiler so schlecht ist. weil ein simples hello world programm , bei der lediglich 'printf' verwendet wird, hat schon 100kb

-
Das Problem ist halt, dass der Compiler nicht unterscheiden kann, ob das Programm simpel ist oder nicht. Jedenfalls nicht so wie du.
-
Der Compiler erzeugt doch viel mehr Code aus dem Programm als du dir denken kannst (Assembler). Da müssen Interrups behandelt werden, Speicherwerte verschoben usw. Für ein if...else... macht das exe-programm intern einen vergleich und springt dann zu einem label, an dem dann der code für das if bzw. das else steht und so weiter.
Ich habe schonmal einen Compiler geschrieben, der aber kein direktes Assembler erzeugt (kenne mich damit net aus), ich weis aber wie die Teile arbeiten.Viele Grüsse,
code_pilot
-
Den Assembler-Code kann man sich doch bei VC++ auch mit ausgeben lassen, meine ich

Die Größe liegt aber afaik eher an den C/C++-Runtime-Librarys
-
hi..
also ich hab mal da bisle in den project settings rumgespielt, speziell bei den linker options. hab das ganze debugging zeugs deaktiviert, jetz sinds nur noch 52 kb anstatt 100 kb

kenn mich aber da wie gesagt net so aus...ich weiss nur dass das prog eigentlicj nur so aussieht
(ohne jetz nachzugucken)db "hello world",0
push esp
mov ebp, esppush
push
call printfmov esp, ebp
pop esp
retgrob..
zusätzlich noch die import tabelle , wo dann der linker seine funktionsnamen und dll namen reinmacht..
und andere exe file spezifikationenund das gibt 50 kb ?
sogar 1 kb wär mir noch viel
mfg
haMMer
-
Du hast einen konstanten Overhead: diverse Libraries (C/C++ Runtime), diverse verweise auf dlls.
die groesse des codes ist hierbei nicht so entscheidend. wie dir vielleicht auffalen wird, ist ein kleines programm und ein größeres programm - fast gleich groß.
mit allen möglichen optimierungen kann man den code auf knapp unter 4KB bringen - aber was bringt es? es läuft dann ja nur langsamer...
-
-
mlooooool

cool.. danke
