Christian Seiler: c++ const performance

Beitrag lesen

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. ;-)