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.)


Anmelden zum Antworten