Gauche:メモリリーク
Gaucheで書いたプログラムがメモリをリークしているのですが、これの原因調査は、やっぱりコードの怪しい部分を見ていく以外ないでしょうか?特別なテクニックはありますか?
- skimu: なぜメモリリークしているという結論に至ったかの過程を具体的に、できたら他の人が再現可能な形でGauche:Bugs なり、gauche-devel なりに報告しましょう。
- ちょっとしたデーモンを書いたのですが、それを動かしていると数日でメモリを使い果たして死んでしまうので、メモリリークと判断しました(というか確かにリークしている)。疑っているのはGaucheではなく自分のプログラムで、なにかのポインタが残ってしまっているのだと思うのですが、それを調べるのが大変で。これをデバッグするときに、たとえば現在の時点でアロケートされているオブジェクトの個数がクラスごとにわかったりすれば、どこらへんがおかしいのかあたりがつきますよね。その手の方法があったりすればいいなぁと思ったのでした。通るコードの量を減らしてみると、リークする早さはゆっくりになったものの、それでもじょじょにずっと増えていきます。Boehm GCを疑いたくはないけど関係あるのかなあ。もうちょっと調べて、できれば再現可能な形でまた報告します。
- び(2005/10/19 02:35:24 PDT): わたしがScheme初心者だった頃よくやらかしたのは、「末尾再帰でループを書いてるつもりで、実は末尾再帰になってなかった」というやつですかね。条件で枝分かれした先で再帰するようなコードで、特定ケースだけ末尾再帰にし損ねてたり。そうすると、ループが回ってある条件を満たすたびにちょっとずつメモリを食い潰していくことになって、なかなか気づかなかったものです。今でもたまにやります(笑)。
- Shiro(2005/10/19 03:20:10 PDT): どんなGCにも「癖」があって、
苦手なパターンにはまると問題が出る時があります。またGauche特有の
注意点もあります。対応はケースバイケースなので具体的なシチュエーションが
わからないと何とも言えないのですが、一般的に注意すべき点をあげておきます
(ちょっと「初心者」の枠からは外れるかもしれませんが…)
- Shiro(2005/10/20 03:19:14 PDT): その論文は大いに参考になりました。
Weak GC-robustでないデータ構造については使う側で安全策を取っておくのが
良さそうですね。
Tag: GC
Last modified : 2008/07/24 03:12:15 UTC