気ままな一言
2008年03月09日
スクリプトのメモリチェック
スクリプトには今のところ16KBとというメモリ(ヒープ)の制限があります。
しかし、世にあるSL内のスクリプトで
メモリチェックしているスクリプトって少ないと思います。
大抵は不要なので問題ないのですが、
リストなどに追加され続けるものに関しては気にする必要があります。
メモリが無くなるとこんなメッセージが出ます。
Script run-time error
Stack-Heap Collision
原因は違うかもしれませんが、見かけたことはあると思います。
こうなってはもう正常な動作はしなくなります。
そこでメモリが少なくなったら解放してあげる必要があるのですが、
実験をしていてあることに気付きました。
メモリの解放されるタイミングがわかりません。
少なくともスクリプト実行中(スクリプト上の処理中)には解放されないようにみえます。
例えば、こんなことをすると無限ループに陥ります。※1
メモリ対策をしたばっかりにフリーズします。
ちなみに関数の処理やメモリの再確保のタイミングは内部処理に関連するみたいなので
よくわかりませんでした。
全然メモリ残量が減らなかったり、突然予想以上に減ったりすることもあるので
余裕をみておいたほうがいいです。
※1 放置し続けたらいつの日か解放されてループを抜けるのかもしれませんが、どちらにしても実用的ではありません。
しかし、世にあるSL内のスクリプトで
メモリチェックしているスクリプトって少ないと思います。
大抵は不要なので問題ないのですが、
リストなどに追加され続けるものに関しては気にする必要があります。
メモリが無くなるとこんなメッセージが出ます。
Script run-time error
Stack-Heap Collision
原因は違うかもしれませんが、見かけたことはあると思います。
こうなってはもう正常な動作はしなくなります。
そこでメモリが少なくなったら解放してあげる必要があるのですが、
実験をしていてあることに気付きました。
メモリの解放されるタイミングがわかりません。
少なくともスクリプト実行中(スクリプト上の処理中)には解放されないようにみえます。
例えば、こんなことをすると無限ループに陥ります。※1
メモリ対策をしたばっかりにフリーズします。
while (llGetFreeMemory() < 1024) { lst = llDeleteSubList(lst, 0, 0); // 先頭から1つ削除 }ループを抜けるような仕組みにするか、別の方法にする必要があります。
ちなみに関数の処理やメモリの再確保のタイミングは内部処理に関連するみたいなので
よくわかりませんでした。
全然メモリ残量が減らなかったり、突然予想以上に減ったりすることもあるので
余裕をみておいたほうがいいです。
※1 放置し続けたらいつの日か解放されてループを抜けるのかもしれませんが、どちらにしても実用的ではありません。
Posted by れむ at 11:55
│スクリプト
コメントありがとう♪
このメッセージはよく見るけど、メモリが無いのが原因だったんだ。
よくわからないけどww
よくわからないけどww
Posted by そうだら at 2008年03月09日 12:18
見た事あるけど
ぜんぜん気にした事なかったW
って話はそれますが
トトゴクのレムさんチップジャー
『物理だW×2』ワーイヾ(´ρ`)ノ゛ワーイ
って
面白い発想のあまり
皆が押し合いへし合いで
踏み絵状態になってましたよWWW
ぜんぜん気にした事なかったW
って話はそれますが
トトゴクのレムさんチップジャー
『物理だW×2』ワーイヾ(´ρ`)ノ゛ワーイ
って
面白い発想のあまり
皆が押し合いへし合いで
踏み絵状態になってましたよWWW
Posted by 某 ト○ロ団長
at 2008年03月09日 19:52

> そうだらさん
メモリが原因なのですが、
よくわからないことばかりです。
>団長さん
チップありがと~~(>_<)
だ、だいじょうぶよ。
邪魔なら(飽きたら)壁に移動します。。
メモリが原因なのですが、
よくわからないことばかりです。
>団長さん
チップありがと~~(>_<)
だ、だいじょうぶよ。
邪魔なら(飽きたら)壁に移動します。。
Posted by れむ
at 2008年03月10日 00:06
