Pixel Pedals of Tomakomai

北海道苫小牧市出身の初老の日常

perlでメモリリーク

問). perlメモリリークを起こすスクリプトを書いて下さい。



答).

my $ref  = {};
$ref->{self} = $ref;
undef $ref;





この場合、無名配列のメモリ領域への参照は$refと$ref->{self}の二つであるため、$refを消しただけでは無名配列のメモリ領域への参照が一つ残り、ガベージコレクトされない。



この現象を調査するには、Devel::Leakを使う。このルーチンを、



use Devel::Leak;
my $h;
Devel::Leak::NoteSV($h);

Devel::Leak::CheckSV($h);





で挟んで実行するといい。NoteSVでメモリ上の変数を記録し、CheckSVで記録した変数以外に増えた物がないかを調べるといった仕組み。