Frage zur Codeoptimierung bei verschiedenen Compilern



  • hi,
    es geht um folgenen Code:

    ...
    	jmp afterfunction
    	}
    
    	donothing(2,4);
    
    	__asm
    	{
    afterfunction:
    	...
    

    ich habe diesen Code mit VisualStudio 2003 kompiliert und er hat donothing(2,4) NICHT herausgelöscht (sprich optimiert).

    Würden andere Compiler das genauso machen? Denn das währe sehr sehr wichtig...

    danke im voraus



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung in das Forum Compiler- und IDE-Forum verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • ESS_CB schrieb:

    ...
    	jmp afterfunction
    	}
    	
    	donothing(2,4);
    
    	__asm
    	{
    afterfunction:
    	...
    

    ich habe diesen Code mit VisualStudio 2003 kompiliert und er hat donothing(2,4) NICHT herausgelöscht (sprich optimiert).

    Was ist mit

    ...
    }
    goto afterfunction;
    
    donothing(2,4);
    
    afterfunction:
    __asm 
    {
      ...
    

    ?

    Ich halte es nämlich für möglich, dass der Compiler nicht in asm-Blöcke reingucken kann. Ansonsten ist es eigentlich kein Problem, beim Strukturieren des Codes in sogenannte Basic Blocks, das sind im Grunde lineare Sequenzen von Anweisungen, die bei einem Label anfangen und mit einem Sprung enden, würde er merken, dass der donothing-Aufruf nicht erreicht werden kann.



  • wiso überhaupt solche blöcke die nie erreicht werden

    das schaut nach unsinnigerweise mehr wartungsaufwand aus



  • der asm block davor liest die Anzahl der Parameter der Funktion aus. Und da er nur diese auslesen soll, und er das eben schon im ersten Block macht ist es unnötig, dass die Funktion noch gerufen wird.

    Ihr meint also, dass er das nicht optimieren wird? Wie gesagt, es ist sehr wichtig, dass er die Funktion so stehen lässt, sonst könnte man ja schlecht die anzahl der Parameter auslesen.



  • ESS_CB schrieb:

    Ihr meint also, dass er das nicht optimieren wird?

    Nein, das meine ich nicht. Er müsste es eigentlich optimieren, tut es aber aus mir noch unbekannten Gründen anscheinend nicht.



  • und kann man da irgendwie der Gefahr aus dem Weg gehen, dass er das weglässt?



  • Generell nicht, da ein Compiler nicht die Aufgabe hat, ein Quellprogramm elementweise in ein Maschinenprogramm zu überführen, sondern ein semantisch äquivalentes (im Rahmen dessen, was die Sprachnorm definiert) Maschinenprogramm zu erzeugen. Sonst gäbe es ja keine Optimierungsmöglichkeiten.
    Die einzige Chance, die du hast, ist also, dem Compiler zu sagen, dass er nicht optimieren soll. Und dann müsstest du vielleicht noch prüfen, dass er das tatsächlich nicht macht.


Anmelden zum Antworten