Ich fand, dass ich oft nur eine kleine std::map
(sagen wir weniger als 10 Schlüssel), oder eine kleine std::vector
mit nur ein paar Elementen, und ich denke, es ist wirklich eine Verschwendung von Leistung, sie immer dynamisch zuzuweisen, vor allem in Strukturen wie std::map<std::string, std::string>
, std::vector<std::string>
, da ist wirklich eine Menge dynamische Allokation beteiligt.Wie vermeidet man die dynamische Zuweisung kleiner Objekte?
Haben Sie einen guten Rat? Reduzieren Sie zumindest die Menge der dynamischen Zuweisung, besser ohne die Benutzerfreundlichkeit zu opfern. Dank
Allgemeinen, wenn dies zu einem Engpass in Ihrem Code ist ein Ansatz ist es, einen [Speicherpool] zu schreiben oder verwenden (https : //stackoverflow.com/questions/16378306/c11-memory-pool-design-pattern). Sie reservieren im Wesentlichen eine Menge Speicher, und dann können Sie sie einfach wiederverwenden, ohne sie neu zuordnen zu müssen. – CoryKramer
Wenn Sie mit einem flugkritischen sw arbeiten, können Sie während der Initialisierung immer Speicherplatz reservieren. Andernfalls, wenn Sie eine echte Leistung benötigen oder einen Engpass haben, müssten Sie einen benutzerdefinierten Speicherzuordner schreiben. – P0W
Haben Sie tatsächlich die Kosten für solche Zuweisungen gemessen? Nur ein Code-Fragment als Engpass zu "denken", ist eine Anleitung zum Ändern des Codes. Also, bitte führen Sie zuerst einige Maßnahmen durch, um zu bestätigen, dass der Aufwand gewährleistet ist. – rpy