2017-05-23 2 views
-4

Ich möchte wissen, wie viel Zeit mein Programm in den Standardkopiekonstruktor einer bestimmten Klasse ausgibt. Gibt es eine Möglichkeit, den Kopierkonstruktor auf eine Weise zu implementieren, die identisch mit der Art und Weise ist, wie der Standardkopiekonstruktor vom Compiler implementiert wird, aber mit einem zusätzlichen Instrumentierungscode, der die aktuelle Zeit vor und nach dem Ausführen des Hauptteils überprüft der Konstruktor?Wie Sie die Leistung eines Standardkopiekonstruktors in C++ messen

+0

Schreiben Sie Ihren eigenen Kopierkonstruktor und vergleichen Sie die Zeit, die mit dem Standard dauert. Aber wenn der Standard eine korrekte Kopie erstellt, kann ich nicht sehen, wie Ihre eigene Implementierung schneller sein könnte. –

+2

Verwenden Sie in C++ 11 Delegierungskonstruktoren, in denen Sie einen benutzerdefinierten Konstruktor mit Instrumentierungslogik hinzufügen und an den normalen Kopierkonstruktor delegieren. Andernfalls lassen Sie den Compiler den Standardkopiekonstruktor normal generieren und verwenden Sie dann einen externen Profiler, der den Code dynamisch zur Laufzeit instrumentiert, anstatt Code für sie zu schreiben. –

+0

Normalerweise würde ich erwarten, dass ein Profiler Ihnen Informationen über den erzeugten Kopierkonstruktor geben kann, es sei denn, der Kopierkonstruktor wird inline. Arbeiten Sie an einer Plattform, auf der ein traditioneller Profiler schwer zu bekommen ist? –

Antwort

0

Verwenden Sie gprof oder einen anderen Profiler. Sie können natürlich Ihre eigenen Timing-Schleifen schreiben, aber der C++ - Compiler kann sehr aggressiv optimieren, was die Sache schwierig macht. Ein richtiger Profiler wird Ihnen genau sagen, wo das Programm seine Zeit verbringt.

Verwandte Themen