Ich habe einen Funktor ohne Mitgliedsvariablen. Ich frage mich, ob es effizienter ist, diesen Funktor bei Bedarf zu erstellen oder ihn als Membervariable zwischenzuspeichern. Es gibt Probleme in Bezug auf die Optimierung der leeren Basisklasse und den Cache-Standort, über die ich mir nicht sicher bin.
%Vor% Für ein leeres Objekt erstellen Sie es einfach im Stapel. Wenn Sie den Funktor Ihrem Typ als Mitglied hinzufügen, werden alle Ihre Objekte größer. Wenn Sie es als Basis hinzufügen (um die leere Basisoptimierung zu verwenden), erhalten Sie ein seltsames Design, bei dem Ihr Typ operator()(const MyData&)
ohne Grund implementiert. Selbst wenn Sie es privat machen, wird der Operator da sein.
Da der Typ keine Mitglieder hat, gibt es keine Cache-Lokalität Probleme, da auf keine Daten zugegriffen werden kann. Die Hauptverwendung eines statuslosen Funktors besteht darin, dem Compiler zu ermöglichen, den Aufruf der Funktion zu verknüpfen (im Vergleich zu einer freien Funktion mit demselben Namen)
Die allgemeine Regel für die Optimierung lautet: Code, damit er zuerst funktioniert und nur dann optimiert wird, wenn er sich als notwendig erweist (mit anderen Worten, Sie haben Ihren Code profiliert und einen Engpass gefunden, der behoben werden muss, um die Leistung erheblich zu verbessern ).
Tags und Links c++ performance