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


HSPTV!掲示板


未解決 解決 停止 削除要請

2016
0814
掘木解放処理抜けの報告0解決


掘木

リンク

2016/8/14(Sun) 09:49:41|NO.76614

HSPのバグ?仕様?の周知を行うのがここでいいのかいまいちわからないですが。

いつのバージョンからか、イベントによるgoto割り込みでsublev、looplevがクリアされるようになりました。
以下のようなコードでネスト異常が発生しないようになりました。

#module #deffunc MemoryLeakTest local mem sdim mem,1024*1024*8 // 8MB wait 1 return #global RemainCount = 0 button "Restart",*main *main color 255,255,255: boxf : color : pos 0,32 : mes strf("RestartedCount : %d",RemainCount) RemainCount ++ repeat MemoryLeakTest loop
ただ、関数呼び出し中のスタック領域に乗るlocal変数が正しく解放されていないようです。
(この例だとボタンを押すたびにタスクマネージャーからメモリが8MB+αずつ増えていくのが確認できるかと思います。)
これだと、ただ単にメモリを食うだけで実行時間が長くならない限りあまり問題ないのですが、
module型変数のmodtermが呼ばれないということを確認しました。
未確認ですが、com型もdelcomされない気がします。

特にonerrorを使用する際はサブルーチンスタック解放が発生するので注意です。
local変数を持つ関数内でwaitも危険ですね。goto割り込みを使う方は特に。

…OpenHSPのどのあたりにその処理があるのか特定するのは私には少々荷が重いです。



この記事に返信する


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