HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
1120
おしえてくん親のmoduleをdelmodしたとき子のmoduleのdelmodもいるのか?2解決


おしえてくん

リンク

2009/11/20(Fri) 09:45:25|NO.28910


#module child _x, _y #modinit int x, int y _x = x: _y = y return #modfunc view mes "" + _x + " " + _y return #global #module parent _ch #modinit newmod _ch, child, 10, 20 return #modfunc start view _ch return #global newmod p, parent start p delmod p newmod p, parent start p delmod p

例えばparentはシーンmoduleでchildはプレイヤーmoduleみたいなのだとします。

オープニング->ゲーム画面−>オープニング−>ゲーム画面

などの切り替えのとき
↑のような処理を繰り返すのですが、このとき親のmoduleがdelmodされた時点で
子のmoduleのメモリは解放されているんでしょうか?


#modterm delmod _ch return

親のモジュールのデストラクタに上記のような記述がないとメモリリークを起こしたりするんでしょうか?
HSPのガベージコレクタ(?)のような機能はどのような感じになっているのか分からなくて質問しました。



この記事に返信する


レノス

リンク

2009/11/20(Fri) 14:32:01|NO.28911

親が解体された後に、親が持っていた変数がすべて破棄されるので、子も解体されます。


// 確認用 #module child _x, _y #modinit logmes "child->init" return #modterm logmes "chlid->term" return #global #module parent _ch #modinit logmes "parent->init" newmod _ch, child return #modterm logmes "parent->term" return #global newmod p, parent delmod p newmod p, parent delmod p

以下、余談。
HSPのメモリ解放処理は、基本的に、変数の操作と連動して行われます。
オブジェクトは常になんらかの変数が持っており、その変数に別の値が代入されたり、
その変数の寿命が切れたりすると (スコープから外れると)、オブジェクトも削除されます。

つまり、「オブジェクトが参照されなくなる」ようなことはあり得ないので、
ガベージコレクションは不要なのです。

この仕様の善し悪しは別として。

また、非公式ですが、ガベージコレクション機能付きのHSPも公開されています。



おしえてくん

リンク

2009/11/20(Fri) 17:19:57|NO.28914

なるほど!!!!ご丁寧にありがとうございます!!
というか子のデストラクタにログ仕込んだらいつ解放されたのか一瞬で分かりますよね。
なぜか失念していました。大変お恥ずかしいw

> HSPのメモリ解放処理は、基本的に、変数の操作と連動して行われます。
> オブジェクトは常になんらかの変数が持っており、その変数に別の値が代入されたり、
> その変数の寿命が切れたりすると (スコープから外れると)、オブジェクトも削除されます

ここすごく参考になりました。スコープから外れても削除されるのは安全設計ですね。
細かいメモリ管理にうんざりしてたのでやっぱりHSP選んでよかったと思います。
これからはいろんなところにログ仕込んでみます。ありがとうございましたー。



ONION software Copyright 1997-2021(c) All rights reserved.