Утечки памяти в List :: MoreUtils 'each_array () и each_arrayref ()? - PullRequest
4 голосов
/ 22 июня 2011

Я только что обнаружил неприятную утечку памяти, используя each_array () и each_arrayref () из List :: MoreUtils.

Эти три строки кода являются частью подпрограммы, выполняемой четыре тысячи раз за каждый прогон. Моя цель - дать правильный формат значениям уже в хэше. У меня есть фиксированное количество хеш-ключей и строка формата для каждого хеш-ключа.

my %hash = ();
# ...
my $two_arrays = each_arrayref( $field_list, $field_list_format );
while ( my ( $field, $format ) = $two_arrays->() ) {
    $hash{ $field } = sprintf $format, $hash{ $field };
}

Если я вставлю return; до my $two_arrays ..., утечка исчезнет. То же самое return; за последней строкой делает утечку.

Поскольку подпрограмма является частью программы-демона, я заметил постоянный рост памяти (как VIRT, так и RES).

Есть что-то, что я сделал не так? Есть ли утечка памяти в each_array () или each_arrayref (), о которых я не знаю?

  • Список :: MoreUtil (ВЕРСИЯ 0.22)
  • Perl 5.12.1 (x86_64 с потоками) в Linux 2.6.32-32-generic (Ubuntu 10.04)

1 Ответ

7 голосов
/ 22 июня 2011

Список :: MoreUtil (VERSION 0.22) датирован июлем 2006 года, 5 лет назад.Текущая версия 0.32, утечка все еще присутствует в этой версии?В последних нескольких версиях было исправлено несколько утечек памяти: http://cpansearch.perl.org/src/ADAMK/List-MoreUtils-0.32/Changes

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...