« The Adventure Of Holy Bird Ver.0.6.4a | メイン | HSPプラグインリンク集 »



HSPでのメモリ節約について

HSPでのメモリ節約について書いていきます。

ところで、HSPでメモリを確保するには
sdim buf,65536
のように書きます。
このようにすると、変数bufのメモリを65536Byte確保してくれます。


このあとで、変数bufがいらなくなったときに
sdim buf,1
と書いたらどうなるでしょう。

どうやら、再度bufが1Byteのサイズで確保しなおされて事実上メモリの開放をしてくれるようです(タスクマネージャ等でみればわかります)

よって、使い終わった変数でなおかつ変数のサイズが大きいときは、このようにして開放してあげるとよいでしょう。

また、これを利用してメモリクリーナを作ることもできるようです。

このことは以前にどこかで読んだこともあったのですが、


さらに!
screen命令でも同様のことが起こるみたいです(よくわかりませんが)
実は気づいたのがついこのあいだです。


まず、最初に
screen 2,1024,768
などとして、ウインドウID2にウインドウを
1024*768の大きさで作成します。

そして、picload "test.bmp"
などとして画像をそこに読み込んだとします。


もし、このウインドウの画像が不要になったとき、


screen 2,1,1

とすると、使用メモリをぐっと減らすことができます。
ウインドウを1*1で再確保してくれるためか、
やはりメモリが開放されている(?)ようです。


なので、使わなくなったウインドウや画像があれば、このようにして
開放してあげると大幅にメモリ使用量を削減できます。


DrectXを使ったゲームを作っていて、かつHSPDX.DLLを使っている場合、


buffer 3,1024,768
picload "IMG/test.bmp" //画像読み込み
es_buffer 3 //DirectXのオフスクリーンバッファへ画像を転送

などとやることが多いです。
es_buffer 3
を実行した後では、ウインドウID3のバッファはすでに不要になっているので
画像転送後は

buffer 3,1,1

とするとよいでしょう。

転送している画像が多い場合は数MByteのメモリを節約できたりします。


※HSP3.0で確認しました。
※間違い等があれば指摘してくれるとありがたいです。


※まさか、es_buffer 3を実行した後でID3の画像が必要になることがあるという落ちなんてないよね……。




応援お願いします(人気blogランキングへ)

トラックバック

このエントリーのトラックバックURL:
http://www.bird-soft.net/mt/mt-tb.cgi/48

コメントを投稿