Wo hab ich mich veroptimiert?
-
Man könnte diesen Thread eventl. auch nach MSVC schieben aber ich finde hier ist er sinnvoller.
Wo habe ich mich hier veroptimiert:
// Anweisungen an den Linker #pragma comment(linker, "/ALIGN:16") /* Ausrichtung innerhalb eines linearen Adressraums */ #pragma comment(linker, "/ENTRY:Programm") /* Einstiegspunkt definieren */ #pragma comment(linker, "/HEAP:0") /* Heapgröße auf 0 setzen */ #pragma comment(linker, "/INCREMENTAL:NO") /* Kein inkrementelles Binden */ #pragma comment(linker, "/NOLOGO") /* Keine Symbolinformationen speichern */ #pragma comment(linker, "/OPT:REF") /* */ #pragma comment(linker, "/STACK:0") /* Stackgröße auf 0 setzen */ #pragma comment(linker, "/SUBSYSTEM:CONSOLE") /* Konsolenapplikation erstellen */ // Merge-Aweisungen an den Linker #pragma comment(linker, "/MERGE:.rdata=.text") #pragma comment(linker, "/MERGE:.text=.text") #pragma comment(linker, "/MERGE:.reloc=.text") // Optimize-Anweisungen an den Linker #pragma optimize("gsy",on) /* Setzt folgende Parameter: a = Kein Aliasing annehmen g = Globale Aktivierungen aktivieren s = Kurze Sequenzen von Maschinencode festlegen y = Rahmenzeiger auf den Programmstack erzeugen */ // Unser selbst definierter Einstiegspunkt ins Programm int Programm() { return(0); }
IMHO dachte ich sofort an die Stack/Heap-Größe aber das war offensichtlich nicht das Problem.
Auf jeden Fall bekomme ich beim Starten folgende Fehlermeldung:
"smallest.exe ist keine zulässige Win32-Anwendung."Wo kann der Fehler liegen? Ich ignoriere übrigens zudem sämtliche Standardbiblitiotheken und die OLDNAMES.lib.
MfG SideWinder
-
Versuchs mal testweise ohne die Merge-Anweisungen oder ohne den Eintrittspunkt umzubenennen.
-
Das hab ich schon versucht - egal nun funktioniert es. OPT:REF soll OPT:ICF sein.
Damit sollte ich nun an das Maximum des MSVC gestoßen sein was die Optimierung eines lauffähigen Progamms mit C/C++ (ohne Assembler oder jeglicher Nacheditierung der *.exe-Datei) betrifft.
Größe des Programms: 480 Bytes
Das fertige Projekt (da sind dann ja auch die Projekteinstellungen richtig eingestellt) ist hier zu finden: http://www.sidewindershome.net/programming/Smallest.zip
Bei weiteren Vorschlägen die *.exe-Datei noch kleiner zu machen bitte melden!
MfG SideWinder
-
BTW: Noch ein paar Änderungen im Vergleich zu diesem Beispiel vorgenommen!
MfG SideWinder
-
Ich hab mir deine zip-Datei zwar noch nicht runtergeladen, aber macht das Programm noch was anderes als return 0?
-
cd9000 schrieb:
Ich hab mir deine zip-Datei zwar noch nicht runtergeladen, aber macht das Programm noch was anderes als return 0?
Ja, den Compiler verrückt
.
-
es ist natürlich auch zu überprüfen ob ein alignment von 16!!!bytes die beste wahl ist *gg*
tschöö
tt
-
cd9000 schrieb:
Ich hab mir deine zip-Datei zwar noch nicht runtergeladen, aber macht das Programm noch was anderes als return 0?
Nein würde ja bloß den Code unnötig aufblähen ;).
Man kann den Wettbewerb natürlich auch zum kleinsten Hello World ausarten lassen *g*
MfG SideWinder
-
Du bezeichnest also ein Programm, dass 0 zurückgibt und sonst gar nichts macht als lauffähig?
-
Was glaubst du, was /bin/true ist
-
Ne, oder? Gibt das echt nur 0 zurück und macht sonst nichts? Gibt es auch false (bin zu faul jetzt Linux zu starten)?
*lol*
Das ist ungefähr genauso sinnvoll wie yes...
-
@cd9k
jo, gibt auch ein false. Aber in wirklich keit unterstützt true/false noch --help/--version als Cmd-Optionen. Die Programme sind eben bei Shell-Skripten nützlich.
-
Das ist klar, dass GNU true 100mal soviel Code ist. Wahrscheinlich gabs da auch schonmal nen Buffer Overflow
-
Wie weit kommt man eigentlich mit anderen Compilern?
MfG SideWinder
-
Nicht *exakt* was du suchst, aber witzig: http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html
-
kingruedi schrieb:
Aber in wirklich keit unterstützt true/false noch --help/--version als Cmd-Optionen.
Wir klich? (btw: Aus ein an der schrei ben ist nicht schön.)