Размер в байтах структуры, содержащей unordered_map - PullRequest
3 голосов
/ 22 сентября 2011

Нужно найти точный размер в байтах, занятый древовидной структурой данных, которую я реализовал. Структура узла выглядит следующим образом

struct Node
{
    int  word;       
    int   count;       
    unordered_map<int, Node*> map;       

}node;   

То, что я делал, это size (int) * 2 (для слова и числа) + map.bucket_count () * (sizeof (int) + sizeof (Node *)) и многократно делают это для каждого узла. Это правильный способ сделать это, если я пренебрегаю надбавки над хранилищем элемента в unordered_map?

Кроме того, если я прав, map.bucket_count () дает количество сегментов, которые выделены в данный момент, включая предварительно выделенные. Должен ли я использовать map.size () вместо этого, который будет игнорировать предварительно выделенные сегменты?

Или вместо всего этого лучше использовать такие инструменты, как MemTrack, чтобы найти используемую память?

1 Ответ

3 голосов
/ 22 сентября 2011

Или вместо всего этого лучше использовать такие инструменты, как MemTrack, чтобы найти используемую память?

Да. Снаружи не видно, сколько памяти занимает unordered_map или другой сложный, непрозрачный объект, и хороший профилировщик памяти может также показать, сколько ресурсов занимает сам распределитель памяти.

...