LINUX.ORG.RU

Re: Обнаружение утечек памяти в программе на perl

вот от балды код
============================================================
#!/usr/bin/perl -w

use strict;
my ($a, @b,%c);

open F,"<file100mb.txt"; 
$/=undef;
$a=<F>; close F;
$/='\n';
.......
# далее идут какие-то действия, после которых 
# переменная $a больше никогда и нигде не будет использоваться
.......
open F,"<file100mb.txt"; 
@b=<F>; close F;

.......
# далее идут какие-то действия, после которых 
# переменная @b больше никогда и нигде не будет использоваться
.......

open F,"<file100mb.txt"; 
my @d=<F>; close F;
$c{$_}=$d[$_] for (0 .. $#c);
.......
# далее идут какие-то действия, после которых 
# переменная %c больше никогда и нигде не будет использоваться
.......

На этом шаге программа имеет размер в 400 мегабайт.
============================================================

Теперь та-же программа, но написанная по другому.

============================================================
#!/usr/bin/perl -w

use strict;
my ($a, @b,%c);

open F,"<file100mb.txt"; 
$/=undef;
$a=<F>; close F;
$/='\n';

.......
# далее идут какие-то действия, после которых 
# переменная $a больше никогда и нигде не будет использоваться
.......
$a='';

open F,"<file100mb.txt"; 
@b=<F>; close F;

.......
# далее идут какие-то действия, после которых 
# переменная @b больше никогда и нигде не будет использоваться
.......
$#b=-1;

open F,"<file100mb.txt"; 
my @d=<F>; close F;
$c{$_}=$d[$_] for (0 .. $#c);
$#с=-1;
.......
# далее идут какие-то действия, после которых 
# переменная %c больше никогда и нигде не будет использоваться
.......

на этом шаге программа имеет размер в 100 мегабайт.
============================================================
причем -w стоит, use strict тоже есть, формально все верно, но в 
одном случае 400 мегабайт объем процесса, а в другом всего лишь сто.
 Т.е. надо следить за переменными, не оставлять их так, чтобы если 
распечатать в файл содержимое всех переменных на эавершающем этапе 
работы скрипта, то он имел бы размер в полгигабайта.

т.е. я бы так лечил "утечки" в памяти.

vilfred ☆☆ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.