bleicher: c++ const performance

Grüße,
vllt weiss es wer zufällig xD - hat die const-deklaration der variablen Einfluss auf die Geschwindigkeit/speicherverbauch im Vergleich zu der "normalen"?
MFG
bleicher

FirefoxMyth

-- __________________________-
  1. Hallo,

    vllt weiss es wer zufällig xD - hat die const-deklaration der variablen Einfluss auf die Geschwindigkeit/speicherverbauch im Vergleich zu der "normalen"?

    soweit ich weiß, dient sie nur dazu, dass der Compiler schreibende Zugriffe auf die so deklarierten Variablen als Fehler melden kann. Der erzeugte Code ist aber theoretsich derselbe, somit macht es per se keinen Geschwindigkeitsunterschied.

    Es könnte aber sein, dass ein Compiler bei const-Deklarationen zusätzliche Optimierungen vornimmt, etwa mehrfaches Laden desselben Wertes in ein Prozessorregister einspart - ohne const wäre das heikel, weil der Wert in der Zwischenzeit durch einen anderen Prozess/Thread geändert worden sein könnte. Bei const-Daten darf das nicht sein, also kann man etwas "entspannter" damit umgehen.

    Ciao,
     Martin

    --
    Funktion und Referenz auf diese sind mir bekannt, mit Zeigern kann ich nicht viel mehr anfangen, als damit auf Buttons zu klicken.
      (Ashura)
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(

  2. Hi!

    vllt weiss es wer zufällig xD - hat die const-deklaration der variablen Einfluss auf die Geschwindigkeit/speicherverbauch im Vergleich zu der "normalen"?

    Natürlich. Das Tippen des const-Schlüsselwortes verbraucht Zeit und belegt Speicher in der Quelltextdatei. Ansonsten dürfte es im Grundrauschen untergehen.

    Lo!

  3. Hallo,

    vllt weiss es wer zufällig xD - hat die const-deklaration der variablen Einfluss auf die Geschwindigkeit/speicherverbauch im Vergleich zu der "normalen"?

    const ist in C++ primär dazu da, um Dich vor üblen Fehlern zu bewahren. Du willst bestimmte Werte nie ändern können und wenn Du dann sowas hast wie

    int const foo = 42; /* ... */ foo = 9 * 6;

    dann meckert der Compiler automatisch.

    Was die Performance angeht, ist const in 99,9% der Fälle[1] vollkommen egal - weil man bei normaler Software in der Regel selten auf CPU-Limitierungen stößt (meist ist es eher I/O oder Netzwerk o.ä.). Und wenn Du wirklich ein CPU/RAM-intensives stück Code hast, wo es auf const oder nicht tatsächlich ankommt, dann willst Du's eh benchmarken als irgendwelchen Faustregeln folgen.

    Daher: Verwende const, wo es sinnvoll ist, um Fehler durch den Compiler abfangen zu lassen, das kann Dir später einiges an Ärger ersparen (auch wenn const-Korrektheit am Anfang mehr Ärger macht, weil man sich einige Dinge viel sauberer überlegen muss), aber denke nicht, dass Dir das performanceweise etwas bringt - das ist die falsche Herangehensweise für const.

    Übrigens, aus eigener Erfahrung: Mikrooptimierungen bringen idR. nichts, viel interessanter ist es, was für Datenstrukturen und Algorithmen Du verwendest. Wenn Du z.B. für sehr viele Daten eine std::map verwendest, dann ist das nicht so optimal, als wenn Du eine std::hash_map (C++0x, bzw. boost::hash_map als Ersatz für ältere Versionen) verwendest, denn std::map der O(log n)-Laufzeitklasse angehört, während std::hash_map O(1) angehört. Für wenige Werte ist das egal (da ist std::map evtl. sogar noch schneller, weil das Hashing wegfällt), für viele Werte wird std::hash_map *deutlich* schneller. Bedenke ferner, dass - wenn es um GUI-Applikationen geht - die gefühlte Performance des Programms für den Benutzer viel wichtiger ist, als die tatsächliche Performance. Wenn eine bestimmte Aktion 2 Sekunden dauert, das Programm dabei aber nicht bedienbar ist, ist das für den Benutzer schlimmer, als wenn eine Aktion 2,5 Sekunden dauert, das Programm währenddessen aber noch flüssig ansprechbar ist. Bei Serverprogrammen dagegen kommt es wirklich auf die reine Performance an. Sowas zu berücksichtigen bringt viel mehr, als sich über einzelne Keywords Gedanken zu machen.

    Viele Grüße,
    Christian

    [1] Statistik frei erfunden. ;-)

    --
    Mein "Weblog" [RSS]
    Using XSLT to create JSON output (Saxon-B 9.0 for Java)

    How to tell the difference between a science fan and a scientist.

    1. Grüße,

      Was die Performance angeht, ist const in 99,9% der Fälle[1] vollkommen egal - weil man bei normaler Software in der Regel selten auf CPU-Limitierungen stößt (meist ist es eher I/O oder Netzwerk o.ä.). Und wenn Du wirklich ein CPU/RAM-intensives stück Code hast, wo es auf const oder nicht tatsächlich ankommt, dann willst Du's eh benchmarken als irgendwelchen Faustregeln folgen.

      CFD-anwendung unter linux - kein GUI. einige zehntausende funktionsfaufrufe.
       ich würde ja benchmarken - aber ich weiss nciht wie man die ausführungszeit eines programmes zuverlässig messen kann - die tatsächliche prozessorzeit, nicht die zeit von jetzt bis n. gibt es da übliche methoden?
      MFG
      bleicher

      FirefoxMyth

      -- __________________________-
      1. Moin Moin!

        ich würde ja benchmarken - aber ich weiss nciht wie man die ausführungszeit eines programmes zuverlässig messen kann - die tatsächliche prozessorzeit, nicht die zeit von jetzt bis n. gibt es da übliche methoden?

        man 1 time

        Alexander

        -- Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".