Diese Methode ist nützlich, wenn Ihr Projekt wirklich groß ist und sehr viele verschiedene Container enthält. Vorteil der Methode ist, dass Sie keine große Menge Code ändern müssen. Sie können den Typ des zu suchenden Containers einschränken. Diese Methode hilft, die Situation pro Behälter und Typ zu diagnostizieren.
Es ist möglich, template< class T > struct allocator
neu zu definieren. Der ursprüngliche Zuordner kann in Standard-Kopfzeilen umbenannt oder geändert werden. Ermöglicht es, Statistiken für die Zuordnung und Freigabe zu erstellen. Sie werden Anzahl und Größe pro Elementtyp kennen. Aber Sie können nicht wissen, welche Instanz des Containers Elemente enthält.
Vorlage template< class T > struct allocator
in Bibliothek Header-Dateien platziert. Es ist immer vorhanden und muss Ihre Entwicklungsumgebungsbibliothek nicht neu erstellen, da Sie wissen, dass die Vorlage nicht in eine statische Bibliothek kompiliert werden kann (Spezialisierung ausschließen). Vorlagen werden immer mit Ihren Quellen kompiliert. Aber möglicherweise ein Problem mit vorkompilierten Headern. Für das Projekt ist es möglich, es neu zu generieren oder nicht zu verwenden, aber für die Bibliothek muss es überprüft werden. Möglich ist dies ein Engpass der Methode, aber es ist einfach zu überprüfen, ob ein Problem existiert oder nicht.
Es gibt eine empirische Methode, die keine Genauigkeit garantiert. Wenn Ihre Anwendung heruntergefahren wird, werden die Container nach Zuweisung der Elemente freigegeben. So können Sie Statistiken pro Container des übergeordneten Typs schreiben, wie viele interne Elemente sich bei welchem Containertyp befanden.
Zum Beispiel lassen wir haben:
vector<A>({1,2,3}) and map<string,B>({1,2}) and map<string,B>({1,2})
Diese Deallokation Ereignisliste wie folgt generieren:
B, B, map<string,B>,
A, A, map<string,A>,
A, A, A, vector<A>,
So können Sie wissen, dass drei Elemente A
bei vector<A>
, 2 Elemente A
bei map<string,A>
, und 2 Elemente A
unter map<string,A>
ich ein Speicher-Monitoring-Tool wie valgrind oder Entschlacken verwenden würden. – SergeyA
Auf welcher Plattform befinden Sie sich? Ich würde dies mithilfe eines Tools erreichen, das den globalen Speicherzuordner festlegt. Visual Studio 2015 verfügt über leistungsstarke integrierte Tools zum Analysieren von Zuordnungen, Tools gibt es auch für andere Plattformen. – mattnewport
@SergeyA: Können Sie bitte erwähnen, wie Valgrind hier verwendet werden kann? – Arun