Was ist Pessimierung?

8

Es gibt einen Kommentar zu der Frage Kann die Verwendung von C + + 11% auto verbessern die Leistung? , die viele Stimmen erzielt hat und schlägt "es ist weniger wahrscheinlich, unbeabsichtigt pessimisieren" als eine Antwort. Ich habe diesen Begriff noch nie zuvor bemerkt. Ich denke, es ist irgendwie das Gegenteil von Optimierung.

Kann jemand eine genauere Definition geben? Was bedeutet es im Zusammenhang mit der Programmierung? Wie würde pessimierter Code aussehen?

    
DaBrain 16.09.2015, 21:14
quelle

3 Antworten

7

Es ist meistens ein Wortspiel, ein Pessimist ist das Gegenteil eines Optimisten. Und Pessimierung schreibt weniger als optimalen Code.

Sowohl Compiler als auch der Programmierer können Code pessimisieren, indem sie fehlerhafte Konstrukte verwenden, die zum Beispiel Dinge kopieren, wenn sie nicht benötigt werden. Das Schlüsselwort auto stellt zumindest sicher, dass Sie den "nächstliegenden Typ" erhalten, daher gibt es keine (unnötige) Typumwandlung.

Beachten Sie, dass die Pessimierung dann erfolgt, wenn der Code NICHT "NICHT optimal" ist:

Es ist keine Pessimierung "wenn wir sechs Monate damit verbringen würden, dies zu optimieren, würde es um 0,5% schneller laufen". Wenn es nicht erforderlich ist, 0,5% schneller zu sein, ist es wahrscheinlich Zeitverschwendung, sechs Monate dafür auszugeben.

Auch die erforderliche Funktionalität wie Sicherheit ist keine Pessimierung: "Der Code ist langsamer als er möglicherweise war, weil wir ihn sicher gemacht haben".

Ein debug-Build ist mot "pessimal", weil es behauptet hat, NULL Zeiger-Dereferenzierungen abzufangen und den Index von Array-Zugriffen usw. zu überprüfen. Solange diese Behauptungen und Überprüfungen so geschrieben sind, dass sie beim Aktivieren "verschwinden" der Freigabemodus. [und wenn dein Code ein Kernkraftwerk betreibt, willst du wahrscheinlich KEINE Abstürze, siehe "Sicherheit" oben]

Ein altes Beispiel, das ich gesehen habe, ist diese C-String-Schleife:

%Vor%

Wenn do stuff with p ausreichend komplex ist, erkennt der Compiler nicht, dass strlen ein konstanter Wert ist, und führt strlen bei jeder Iteration der Schleife aus. Die Schleife wird VIEL schneller laufen, wenn wir:

%Vor%

[Kein Beispiel für auto , fürchte ich]

    
Mats Petersson 16.09.2015, 21:21
quelle
2

Pessimizing bedeutet etwas mehr als nur die Leistung zu geben, die nicht die beste ist, die es sein könnte.

Im Allgemeinen tut es etwas, typischerweise im Interesse der Leistungsverbesserung, das die Leistung beeinträchtigt. Obwohl nicht unbedingt erforderlich, gibt es häufig die Implikation, dass das Ergebnis tatsächlich schlimmer ist, als wenn Sie einfach etwas Einfaches und Offensichtliches getan hätten.

In diesem Fall ist die Verwendung von auto , um den Typ der Variablen anzugeben, einfach und offensichtlich - und unabhängig davon, ob sie genau optimal ist, legt sie ein Grundlevel für die Leistung fest. Wenn / Wenn Sie den Typ explizit angeben, haben Sie im Grunde nur zwei Möglichkeiten: Definieren Sie explizit den gleichen Typ, den auto abgeleitet hätte (genau die gleiche Leistung erhalten), oder einen anderen Typ angeben (in diesem Fall gibt es nur wirklich) zwei Möglichkeiten: Es wird überhaupt nicht funktionieren, oder es wird irgendeine Art von Konvertierung machen, die fast zwangsläufig die Leistung beeinträchtigt.)

Zusammenfassung: Pessimierung ist normalerweise nicht nur "weniger als optimale Leistung". Es ist in der Regel "zusätzliche Arbeit (möglicherweise in der Hoffnung, die Leistung zu verbessern), die Leistung tatsächlich verletzt."

    
Jerry Coffin 22.09.2015 00:05
quelle
1

Sie hätten es einfach in einem Wörterbuch nachschlagen können, wie diese Seite , die besagt:

  

pessimize (Verb):

     

(transitiv) Um (etwas) weniger effizient zu machen, wie zum Beispiel ein Computerprogramm.

    
Roman Kotenko 16.09.2015 21:21
quelle