Я только что обнаружил неприятную утечку памяти, используя 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)