Wie können wir den Speicher verwendet finden (in Bytes) durch die Objekte Begriff und termsMap. Haben wir eine Bibliothek?
Sie sollten Ihren eigenen Zuordnertyp verwenden.
typedef std::set<string,
your_allocator_1_that_can_count_memory_consumption_t> Terms;
typedef std::map<string, std::pair<int,Terms>,
your_allocator_2_that_can_count_memory_consumption_t> TermMap;
typedef std::multimap<int, string, greater<int>,
your_allocator_3_that_can_count_memory_consumption_t> TermsMap;
Ich habe noch nicht diese Idee für std :: string überprüft dann, wenn es schwierig ist, einfach zu implementieren Ihre eigene Klasse fixed_string verwenden, die nur char s wickelt [max-String-Länge].
Und wenn Sie in Ihrem Programm müssen es nur aus your_allocator_1_that_can_counts_memory_consumption_t
, your_allocator_2_that_can_counts_memory_consumption_t
, your_allocator_3_that_can_counts_memory_consumption_t
bekommen Speicherverbrauch zu erfahren.
Edited
Für UncleBens ich meinen Punkt klären wollen.
Soweit ich die Frage der ARV verstehe, ist es notwendig zu wissen, wie viel Speicher für set :: set und std :: map zugewiesen ist, einschließlich aller Speicher für Elemente des Satzes und der Karte zugeordnet. Es ist also nicht nur die Größe (Begriffe).
Also habe ich nur einen sehr einfachen Zuweiser vorgeschlagen. Ohne in zu vielen Details könnte es so aussehen:
template <class T>
class your_allocator_1_that_can_counts_memory_consumption_t {
public:
// interfaces that are required by the standart
private:
std::allocator<T> std_allocator_;
// here you need to put your variable to count bytes
size_t globale_variable_for_allocator_1_to_count_bytes_;
};
Dieses allocator zählt nur Anzahl der zugewiesenen und nicht zugeordneten Bytes und für echte Zuweisung und Freigabe seines Mitglied std_allocator_ verwenden. Ich muss es möglicherweise unter gdb debuggen, um einen Haltepunkt auf malloc() und auf free() zu setzen, um sicherzustellen, dass jede Zuordnung und Freigabe tatsächlich meinen Zuordner durchläuft.
Ich wäre dankbar, wenn Sie mich auf einige Probleme mit dieser Idee hinweisen, da ich es bereits in meinem Programm implementiert habe, das auf Windows, Linux und HP-UX läuft und ich einfach meine Zuordner frage, wie viel Speicher Jeder meiner Container benutzt.
'sizeof' ist ein Operator, keine Funktion. –
@Carl Norum: Richtig du bist. Danke für die Erinnerung! –
Hmm. Dies scheint aus zwei Gründen nicht zu funktionieren: Die Mitglieder sind privat, und Sie dürfen nicht die Größe einer nicht statischen Mitgliedsvariablen annehmen. Interessant! –