自分メモ

ちょっと研究室の同期のプログラムについて色々調べてたので自分用のメモとして。




 Perlは基本的にメモリリークを起こさないように作られている。
 分かりやすいところで言うと、配列。Cとかだと前もって宣言しておくけど、Perlではそれがいらない。そのままどんどん増やしてける(この辺は普通にプログラム組んでたら、というかPerl1秒目で理解できる)

 んでここで話は横道にそれるけど、C#大好きな私はガベージコレクタの存在を一応知ってた。
 基本的にメモリを自動的に解放してくれる、と。

 Perlのガベージコレクタはリファレンスカウント方式とか。

 ……?

 つまりリファレンスの数を内部で換算して、0になったらそのメモリを破棄するとか。
 ほえー。

 でもこれ構造がシンプルすぎてちょっとあれ。特に循環参照とかしてると、Perlではメモリリークを起こすらしい。


 んじゃあこれを解決するにはどうするか? という。

 つまり循環参照で発生するリファレンスに対してカウントアップしなければ良い、という。

 ……?

 理屈は分かるんですが具体的にどうするんでしょうこれ。

 で、結論。
 Scalar::Utilモジュールを使えば一発とのこと。

 ……なにこれPerl凄い。分かってたことですけどモジュール凄い。


 というわけで自分用のメモとして放置。ぺたり。