Zeit für Lowlevel Sachen wie if, Funktionsaufruf und Co.



  • Das heißt, vorm Pointercheck abzufrage, ob enabled, ist nicht viel langsamer?
    Gut, trotzdem frag ich mich, ob es dynamische Check in diesem Fall bringt. bringt.



  • Wenn du dich zur Laufzeit zwischen zwei Codepfaden entscheiden musst ist if *immer* das schnellste was du kriegen kannst.

    Die einzige Optimierung die du hier noch draufwerfen kannst ist jedes Mal zur Laufzeit beide Pfade auszuführen und dann im if nur das richtige Ergebnis zu selektieren. Das kann in wenigen, ganz speziellen Fällen ein Performanceplus bringen, aber wer mit sowas anfängt ohne vorher gründlichst zu profilen macht definitiv was falsch.



  • Nathan schrieb:

    Das heißt, vorm Pointercheck abzufrage, ob enabled, ist nicht viel langsamer?
    Gut, trotzdem frag ich mich, ob es dynamische Check in diesem Fall bringt. bringt.

    Aeh wat?



  • if (enabled)
    if (!ptr)
    ...
    ist - wenn enabled == false - nicht viel langsamer als
    if (!ptr)
    ...
    da enabled ja nur selten geändert wird?
    Trotzdem frage ich mich, ob es das bringt, weil man da auh gleich immer checken kann.o



  • 1.) Dein Beispiel lebt in einem Kontext, der mir nicht bekannt ist.
    2.) 2 Mal if ist doppelt so teuer wie 1 Mal if (abhaengig vom Praedikat).
    3.) if kostet fast nix (abhaengig vom Praedikat).
    4.) 2 Mal von fast nix, ist meistens wieder fast nix.



  • Den Kontext hab ich oben erklärt, dass ist mein Thread. 🙂



  • Und weiter:

    5.) Funktionsaufrufe kosten fast nix (abhaengig von Parametern).
    6.) Leere Funktionsaufrufe kosten fast nix (abhaengig vom Parametern).
    7.) Problem: Spielt fast nix eine Rolle?
    8.) Problem: Wie vergleicht man fast nix?

    Hat ptr einen Wert in Abhaengigkeit von 'enabled' dann sollte bei enabled doch schon klar sein, was ptr ist. D.h. enabled ist ueberfluessig. Umgedreht genauso.



  • Ich plane, nullptr Checks dynamisch ausschaltbar zu machen, via der ..
    im OT erklärten Methode.
    miraculix erklärte aber, dass das wg branch prediction langsamer ist.
    Um das zu vergewissern fragte ich, ob die Methode mit zwei Checks nicht viel langsamer ist, als der ohne den Check, da der äußere Check, ob enabled, sich ja fast nie ändert.
    Trotz allem frage ich mich, ob das dynamische Ausschalten was bringt.



  • Nathan, du verstrickst dich da glaube ich in eine total sinnlose Aufgabe.
    Mach die Nullzeiger-Checks statisch und permanent und nicht deaktivierbar.
    Oder steuere sie über #ifndef DEBUG .
    Aber dynamisch? Wozu?



  • Das frag ich mich wie gesagt mittlerweile auch.
    Naja, es hätte von der Konsistenz her ganz gut in mein Konfigurationskonzept hinein gepasst.
    Mach das Flag jetzt constexpr, das wird wohl optimiert werden.


Anmelden zum Antworten