Gene hat geschrieben:Goderion hat geschrieben:
Der shared_ptr ist zu meiner Überraschung langsamer, liegt vielleicht daran, dass der shared_ptr auch einen "Weak-Counter" hat.
Ich tippe auf thread sicherheit.Der std::shared_ptr ist thread sicher, das heißt mehrere threads können "zeitgleich" kopien erstellen und der reference count wird korrekt angepasst. Deine Lösung ist nicht Thread sicher.
Jo, das scheint es gewesen zu sein. Benutze ich die thread sichere Version, ist der shared_ptr etwas schneller, was wohl an den fehlenden virtual calls liegt.
2206904 µs
2206011 µs
2202900 µs
2205281 µs
Bei mir laufen 5 Threads (Main, Input, Video, Sound und Logik), aber ich brauche an nur sehr wenigen Stellen thread sichere Objekte.
Schrompf hat geschrieben:Die selbe Vermutung habe ich auch beim Heap. Gegenüber dem generischen Heap kann man eigentlich nur mit Kontextwissen bei speziellen Anwendungsfällen was rausholen. Dazu sind Custom Allocators ja da, nöch :-)
Mein Speichermanager ist nicht thread sicher, was natürlich einer der Gründe sein wird, warum ich damit schneller Objekte/Speicher reservieren und wieder freigeben kann. An den Stellen, wo ich den Speichermanager nutze, ist auch keine thread-Sicherheit nötig.
Schrompf hat geschrieben:Aber nuja, jeder wie er mag.
Immer so ein Abschlusssatz... ;-)
Nur weil ich nicht immer den aktuellen Standard nutze, bedeutet das nicht, dass es gleich Kagge ist. Die Unreal Engine nutzt z.B. auch keine std::shared_ptr.
Ich will jetzt die Unreal-Engine nicht mit meinem Programm vergleichen oder das Können der Unreal-Entwickler mit meinen Fähigkeiten, das wäre absurd,
aber nur weil etwas nicht dem Standard entspricht, es gleich zu verteufeln, halte ich für falsch.
Ich überlege auch schon seit gestern, ob und wo ich den std::shared_ptr in meinem Programm sinnvoll einsetzen kann, habe auch schon etwas mit dem shared_ptr experimentiert,
aber aktuell sehe ich ihn ihm keinen Nutzen für mich, vielleicht unter anderen Bedingungen in einem anderen Programm.
Ich bedanke mich für die Antworten und Hinweise, die ihr mir gegeben habt und werde weiter darüber nachdenken.