我刚刚使用 List::MoreUtils 中的 each_array() 和 each_arrayref() 发现了令人讨厌的内存泄漏。
这三行代码是每次运行执行四千次的子程序的一部分。
我的目标是为散列中已有的值提供正确的格式。我有固定数量的哈希键和每个哈希键的格式字符串。
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() 是否存在内存泄漏?
最佳答案
List::MoreUtil ( VERSION 0.22 ) 的日期是 2006 年 7 月,也就是 5 年前。当前版本是0.32,这个版本是否仍然存在泄漏?在最近的几个版本中修复了几个内存泄漏:http://cpansearch.perl.org/src/ADAMK/List-MoreUtils-0.32/Changes
关于perl - List::MoreUtils' each_array() 和 each_arrayref() 中的内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6438266/