Speedfrage :)



  • ob du mit == != >= <= < > prüfst macht keinen Unterschied, wenn der Compiler NICHT optimiert, dann ergibt das jeweils ein cmp gefolgt von
    je, jne, jnb, jna, ja oder jb.
    Wenn er allerdings optimiert, kann er bei Prüfungen wie:
    x != 0
    das mit einem test x übersetzen, der glaube ich manchmal schneller ist.
    Aber wie gesagt es lag eh ein Fehler im Testprog vor. Aber ich möchte dazu noch sagen, dass es Ratsam ist zwei verschiedene Programme zu schreiben, da sonst evntl. Caching oder div. Packagelimits, das Ergebnis verfälschen können.

    mfg
    -bg-



  • @-bg-

    ich würde gerne wissen wo steht das ";" ein befehl ist. wenn da so wäre dann müsste man doch nicht "printf("A");" schreiben sondern könnte einfach "printf("A")" schreiben. sonst würde man ja immer schreiben "printf("A")NOP" was keinen sinn macht.

    meines wissens teilt ";" dem compiler einfach nur mit das ein befehl hier abgeschlossen wird, damit man auch mehere befehle in eine reihe schreiben kann, wie z.b.: "printf("A");printf("B");printf("C");"

    also von einem befehl zu sprechen ist glaube ich falsch. ";" versursacht höchstens, das der compiler "NOP" erstellt, weil kein befehl davor steht bzw, weil KEIN befehl abgeschlossen wird. eben NoOperation vor dem ";" 🙂



  • bei printf("a"); ist das ; Teil des Befehls. Bei ; ist ; der Befehl selbst. Nicht jedes ; ist ein eigener Befehl. Sehr deutlich zu sehen bei printf(";;");



  • Jep, da muss man tatsächlich unterscheiden.

    if Bedingung erfüllt
    ;
    else
    anderes
    

    heisst in diesem Falle z.B.: if Bedingung erfüllt, dann leere Anweisung, also mache nichts.
    Zumindest habe ich das so gelernt 😃
    Kernighan / Ritchie haben das auch so rausgestellt. Ich glaube, ; an sich ist im Ansi-Standard sogar explizit als Befehl aufgeführt.

    [ Dieser Beitrag wurde am 22.11.2002 um 15:49 Uhr von Casi666 editiert. ]



  • okok

    ich interpretier es einfach anders, es ist aber in etwa das selbe!

    für mich schließt bei

    if (true)
    printf("A");
    else
    printf("B");

    das ";" den befehl printf("A") ab

    und bei

    if (true)
    ;
    else
    printf("B");

    schließt das ";" eine leere anwesiung ab.

    denn man kann ja genauso wenig

    if (true)
    printf("A) //ohne ";"
    else
    printf("B");

    schreiben

    und genauso wenig

    if (true)
    //ohne ";"
    else
    printf("B");

    für mich ist ";" nur ein bestandteil eines befehls aber kein befehl selber. wenn das so wäre dann müsste das ";" beim compilieren in irgendwelche maschinenbefehle übersetzt werden. das tut der compiler aber nicht, egal bei welchem befehl.

    ein 'MyFunc();' wird zu

    call MyFunc

    und nicht zu

    call MyFunc
    nop

    es ist eben nur eine anweisung für den compiler, die befehle abschliesst, aber kein befehl selber, kann aber auch sein das ich "befehl" falsch interpretiere.

    ich hoffe ihr versteht diesen kleinen unterschied 🙂



  • Die Diskussion ist reichlich sinnlos. Man kann sich im Rahmen des Standards nicht darüber unterhalten, welcher Code wann generiert werden könnte ... es ist alles erlaubt, was die as-if-Regel nicht verletzt. Geht man also vom Stnadard weg, kann man nur noch darüber diskutieren, was existierende oder naheliegende Implementierungen machen. Gibt es eine, die für leere Anweisungen NOPs generiert? Sinnvoll oder gar naheliegend ist das mit Sicherheit nicht.


Anmelden zum Antworten