Я пытаюсь получить представление о потреблении памяти структурой данных и не уверен, правильно ли Devel::Size
обрабатывает общие ссылки.
Вот небольшая структура данных дляпроиллюстрируйте мою точку зрения:
use Devel::Size qw(total_size);
my $shared_obj = Foo->new();
my @list = ();
for (1..10) {
push @list, Bar->new({ foo => $shared_obj });
}
print "Memory usage: ", total_size(\@list), "\n";
Perl должен (AFAIK) выделить память для одного объекта Foo
, и каждому объекту Bar
потребуется только память, необходимая для ссылки на хеш-код Foo
.
У меня сложилось впечатление, что Devel::Size
неправильно складывает использование памяти: он добавляет 10-кратный размер Foo
, а не 10-кратный размер ссылки на хэш и 1-кратный размер Foo
.
Кто-нибудь может подтвердить это поведение?Является ли Devel::Size
неправильным или мое понимание распределения памяти в Perl неверно?Кроме того, есть ли лучший модуль для профилирования сложных структур данных?