Optimierung



  • Hallo zusammen,

    da sich meine Frage um C und C++ dreht denke
    ich sie hier am besten aufgehoben ist.

    Beispiel 1:

    unsigned long lTemp;
    lTemp = (lLength +1) *sizeof( /*IRGENDETWAS*/ );
    pPtr1 = malloc( lTemp );
    pPtr2 = malloc( lTemp );
    

    Beispiel2:

    pPtr1 = malloc( (lLength +1) *sizeof( /*IRGENDETWAS*/ );
    pPtr2 = malloc( (lLength +1) *sizeof( /*IRGENDETWAS*/ );
    

    Nun meine Frage: Welcher der beiden Codes ist schneller?
    Bringt die verwendung einer temporären Variable mehr weil
    die Berechnung nur einmal gemacht werden muss oder ist das
    erstellen einer temporären Variable langsamer als wenn man
    diese Berechnung 2x macht?

    Danke schon mal für eure Hilfe.

    Bye Peter.



  • IMHO sollte ein guter Compiler aus beidem das Gleiche machen. 🙂

    EDIT : Bei Java würde ich dir aber zur ersten Variante raten!

    [ Dieser Beitrag wurde am 08.11.2002 um 10:37 Uhr von Gregor editiert. ]



  • Bits sind billig geworden. -> Wenn möglich, sollten Ergebnisse immer zwischengespeichert werden. Siehe dazu auch: Perlen der Programmierkunst



  • Prozessortakte sind auch billig geworden ...

    angenommen, du hast einen Compiler, der das tatsächlich nicht optimiert: Dann dauert die malloc-Funktion allein schon 100mal länger als die lächerliche Berechnung da.

    Noch ein paar gehaltvolle Phrasen gedroschen:
    Premature optimization is the root of all evil. -- Don E. Knuth
    First make it work, then make it fast. -- ka
    Nicht raten, messen! -- ich 😉



  • @Bashar,

    ich weiss ja das malloc sehr lange dauert.
    Ich bin gerade dabei meinen funktionierenden Code
    zu optimieren. Ob ich dabei jetzt ein oder zwei
    Takte einspare ist für mich persönlich schon recht
    wichtig.

    Ich will jetzt auch keine Diskussion darüber ob Optimierung
    heutzutage noch wichtig ist.

    Und wenn ich hier und dort einige
    Takte einsparen kann wäre das super.

    Danke nochmal für eure Hilfe.

    Bye Peter.



  • 😃

    Jeder moderne Compiler macht da das selbe draus!!

    Musst mal probieren nur 1mal malloc aufzurufen -> DAS wuerde etwas bringen.



  • Optimieren ja, aber nicht an den falschen Ecken!



  • Es ist leichter Funktionierenden Code zu Optimieren als Optimierten Code zu entbugen. (ka wer das gesagt hat)

    wenn schon solche pseudo Optmierungen dan so

    unsigned long lTemp = (lLength + 1) *sizeof( /*IRGENDETWAS*/ );
    pPtr1 = malloc( lTemp );
    pPtr2 = malloc( lTemp );
    

    http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=Declare#Answ



  • schau dir doch einfach den Assembler Code an oder benutz am besten einen Profiler (BTW. der beste Profiler ist sicher, wenn du mit rdtsc den Tacktcounter ausliest)


Log in to reply