URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 4336
[ Назад ]

Исходное сообщение
"perl и выделение памяти"

Отправлено usama , 06-Июн-05 18:39 
Необходимо ли в Perl вручную освобождать память? Дело в том, что у меня есть скрипт фильтрации почты(milter api), который все время увеличивается в размере. Что делать? В Cи все понятно - не освободил память. А тут что?

Содержание

Сообщения в этом обсуждении
"perl и выделение памяти"
Отправлено rWizard , 06-Июн-05 19:42 
Если не ошибаюсь,
В perl "сборщик мусора" удаляет объект, когда он исчезает из облатси видимотси и, если на него не осталось ни одной ссылки.
те после кажного выполнения приведенной ниже процедуры в памяти буден оставаться ещё два анонимных хеша.

sub test {
    my $a = {};
    my $b = { a => \$a };
    $a = { b => \$b };
}


"perl и выделение памяти"
Отправлено ACCA , 07-Июн-05 02:57 
>Необходимо ли в Perl вручную освобождать память? Дело в том, что у

Нет, не нужно. Разумеется можно наворотить что-нибудь вроде:

my @a; while(1) { push @a, "I'm gonna kill this sucker"; }


>меня есть скрипт фильтрации почты(milter api), который все время увеличивается в
>размере. Что делать? В Cи все понятно - не освободил память.
>А тут что?

Скорее всего подпихиваешь всё новые и новые данные в массивы и хэши, которые существуют всё время работы программы.

Хороший совет - перебей все глобальные переменные. Параметры функций и возвращаемые результаты передавай в явном виде.