高見知英のかいはつにっし(β)

高見知英のアプリケーション開発日誌 のほか、地域活動などの活動報告ブログ。

メモリ不足…ではないらしい

 さて、CGIですが、やっぱりダメです。メモリ不足でエラーが出ます。オブジェクト指向にしたせいか、より早くメモリを消費するようになってしまいました。

 とはいえ、いろいろ試してみると、それだけというわけでもないような…。たとえば、以下のコードをmain.pl(どのページでもまず呼び出すスクリプト)に書き込んでみます。

  my $a = 'a' x (1024 * 1024 * 102);

 当然、100MB以上のメモリが確保されるわけですが、なんのエラーも起こりません。最後に4を加えて1GB確保してしまうとさすがに落ちますが、これは大丈夫です。
で、問題のページを表示する部分を呼んでみると、エラーが起きた時点では3300KB消費。メモリ不足ではないようです。となると、やっぱりどこか…。


 そういえば、Perlガベージコレクションは、DelphiのString型などと同じく、参照カウント制*1で動いているそうですね、これの長所は、実装が簡単なことですが、他のやり方と比べてまんべんなく処理が重くなり、また処理がループしたときに対処できなくなるおそれがあるとのこと。ということは、これが問題なのでしょうか?
Delphiではそういう問題起こった記憶ないんですがねぇ…。

*1:参照されればポイントを+1、参照が破棄されたら-1、ポイントが0になった時点で解放