[Cascavel-pm] Memoria x Perl

Nilson Santos Figueiredo Junior acid06 em gmail.com
Quarta Abril 5 16:12:34 PDT 2006


On 4/5/06, Lorn <lorn.br em gmail.com> wrote:
> Estou com uma duvida, tem um programa em perl aqui na empresa, que indexa
> documentos, e enquanto ele vai indexando a memoria vai caindo, e no final,
> ele fica usando a memoria virtual, depois que o programa termina ele não
> libera a memoria, eu acho ( tenho quase certeza ) que não tem nada parecido
> com o free do C no perl, e eu acho também que o linux deixar essa memoria no
> "buffer" pra acessar mais rapido se eu for rodar o programa de novo, eu só
> queria confirmar isso, alguem já leu alguma coisa sobre como é gerenciada a
> memoria no linux?

Toda a memória de qualquer processo é liberada quando ele é finalizado.

Não é que não existe nada como o free() em Perl. É porque não faz
sentido existir nada como o free() em Perl. O perl cuida de todo o
gerenciamento da memória para você, quando uma variável sai de escopo,
ela é automaticamente liberada. Aliás, esse é um dos maus de se
utilizar variáveis globais - elas nunca são liberadas, a não ser que
explicitamente atribua um valor vazio às mesmas ou as faça indefinidas
(undef $var).

Na verdade, essa explicação foi uma simplificação porque quando a
variável sai do escopo, ela não é realmente liberada para o sistema
operacional, ela é liberada para o pool interno de memória do Perl,
assim, quando outra variável precisar de mais memória, não será
necessário outro malloc(). Mas isso ainda é uma simplificação. ;-)

No final das contas a idéia é o seguinte: o perl faz tudo certo. Se
tem algum problema que poderia ser solucionado de outra forma a culpa,
provavelmente, é sua. ;-)

-Nilson Santos F. Jr.


Mais detalhes sobre a lista de discussão Cascavel-pm