Nullptr löschen - Performance Overhead?

8

Der Operator delete überprüft sich selbst, wenn der Zeiger nullptr ist. Gibt es einen Performance-Overhead beim Aufrufen von delete auf einem nullptr, ohne es selbst zu überprüfen?

%Vor%

oder

%Vor%

Welche der obigen Ausführungen wird schneller ausgeführt, wenn ptr nullptr ist?

    
NFRCR 16.03.2012, 17:06
quelle

4 Antworten

18

Wie immer kommt es auf den Compiler an.

Ich benutze MSVC, das beide Zeilen zu genau demselben Code kompiliert.

Die Regeln sagen, dass wenn der Zeiger Null ist, das Löschen keine Wirkung hat. Also, wenn Sie das nicht überprüfen, muss der Compiler sowieso.

    
Bo Persson 16.03.2012, 17:10
quelle
2

Dies ist definitiv ein Fall von Überoptimierung. Auf jedem modernen Prozessor beträgt der Unterschied einige Nanosekunden.

Durch die Überprüfung vermeidet der Code den Overhead eines Aufrufs (zur Löschbibliotheksroutine). In 99% der Fälle ist die leichte zusätzliche Komplexität des Quellcodes (geschweifte Klammern, potentielles Tippfehler != , etc.) eher ein Problem als die zusätzliche Ausführungszeit.

    
wallyk 16.03.2012 17:09
quelle
2

Nein, es gibt keinen Overhead, wenn Sie nicht überprüfen, ob ptr nullptr ist.

Wenn Sie manuell eine Prüfung durchführen, wird die gleiche Prüfung zweimal durchgeführt, obwohl dies vernachlässigbar ist, verglichen mit den Kosten des Systemaufrufs, könnten Sie erwarten, dass ptr nicht null ist.

    
Rafał Rawicki 16.03.2012 17:09
quelle
2
  

Welche der obigen Ausführungen wird schneller ausgeführt, wenn ptr nullptr ist?

Angenommen, Ihr Check wird nicht optimiert, der oberste wäre schneller. Wenn es weg optimiert wird, wäre keiner schneller. Überlassen Sie es dem Compiler.

    
James McLaughlin 16.03.2012 17:09
quelle

Tags und Links