Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Kommt drauf an, was man macht. Ich würde das wie bereits erwähnt erst in Erwägung ziehen, falls ich dort wirklich Probleme habe oder es einen anderen Grund für Zeiger gibt (z.B. Polymorphie). Aber einfach mal auf gut Glück zu optimieren ist nicht gerade der beste Ansatz. Und wenn schon, würde ich Smart Pointer speichern oder gleich Boost.Pointer Container verwenden. Denn selber freizugeben ist nicht wirklich praktisch.Zitat von »"K-Bal"«
Du könntest auch Pointer auf das Objekt speichern, das verursacht weniger Overhead.
Zitat
bei linearen Containern wie std::vector oder std::deque muss jedes Element einzeln allokiert werden, was mehr Zeit braucht als eine Massen-Allokation.
Ja, da hast du Recht. Ich bezog mich eben auf den Fall, in dem man als Element kein Objekt einer Klasse, sondern einen Zeiger speichert. Dieser bekommt dann per new einzeln Speicher für das eigentliche Objekt zugewiesen. Somit muss das für jedes Element getan werden, was einzeln langsamer ist, als wenn man einen grossen Speicherbereich auf einmal allokiert.Zitat von »"n0_0ne"«
Soweit ich das verstanden habe, wird bei Vector intern eine größere Menge Speicher allokiert und dann so lange dort hineingespeichert, bis sie voll ist, dann wird ein größerer Platz allokiert und alles dort hineinkopiert... Also wird doch nicht alles einzeln allokiert?
Alter Hase
Aber die Klasseninstanz muss trotzdem erstellt werden, nur ist dann noch ein Zeiger dazwischen.Zitat von »"K-Bal"«
Normalerweise ist der Speicherverbrauch eines Zeigers ja kleiner als der einer zusätzlichen Klasseninstanz.
Alter Hase
Zitat von »"Nexus"«
Aber die Klasseninstanz muss trotzdem erstellt werden, nur ist dann noch ein Zeiger dazwischen.Zitat von »"K-Bal"«
Normalerweise ist der Speicherverbrauch eines Zeigers ja kleiner als der einer zusätzlichen Klasseninstanz.
Das könnte höchstens bei einem std::vector etwas ausmachen, da der immer etwas vorallokiert. Aber wenn es um Speicherverbrauch geht, wäre eine andere Datenstruktur geeigneter.
Das eine Objekt existiert nur temporär. Also geht es dir doch nicht um den Speicherplatz, sondern um den Aufwand beim Kopieren, richtig?Zitat von »"K-Bal"«
Es geht ja darum, dass das Objekt beim speichern kopiert wird, also wird der doppelte Speicherplatz beansprucht. Wenn jetzt ein Zeiger doppelt vorhanden ist ist das nicht so tragisch, wie wenn ne riesige Klasse zwei mal vorhanden ist.
Werbeanzeige