AX

電霊ログ

私のやってるサイト、電子の言霊の活動ログ

カテゴリークラウド

タグリスト

最近のトラックバック

月別アーカイブ(タブ)

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  • [HSP3] 確保した変数を開放する

HSPでは一度確保した変数の領域はプログラムの終了時にまとめて開放されます。プログラムの実行中にメモリを節約するには、
    sdim buf, 256
    buf = "文字列代入"
    sdim buf
などとして使用した変数を再作成する方法があります。

更にモジュール変数を使う事でプログラム実行中に使用している変数のメモリー領域をまとめて開放することが出来ます。実際にメモリー監視ソフトでメモリーの状態を確認しながら実行すると分かりやすいでしょう。

#スクリプトは HSP3.21 で確認

// モジュール変数を利用することで、
// 確保した変数領域を完全に開放する

#module test buf

    #modinit int mega
        sdim buf, 1024 * 1024 * mega
    return

#global

#const SIZE 100

    button "確保"*GET
    button "開放"*FREE
    stop

*GET
    newmod mv, test, size
    n++
    mes strf("%d MB 確保しました(現在の確保数:%d)"SIZE, n)
    stop

*FREE
    if n > 0 {
        n--
        delmod mv.n
        mes strf("%d MB 開放しました(現在の確保数:%d)"SIZE, n)
    }
    stop
変数を普通に作成する代わりに、モジュール変数内で 使用する変数を確保しています。こうする事によって、モジュール変数を delmod すればいつでもモジュール変数内で確保された変数をまとめて解放する事が出来ます。

ただ、モジュール変数の配列の場合 全ての要素を delmod で削除しても、呼び出し元のモジュール変数の 配列の長さまでは変わらないので、配列の長さも短くしたい場合はモジュール変数を作成し直す必要があります。

#module test buf
    #modinit int mega
        sdim buf, 1024 * 1024 * mega
    return
#global
    // モジュール変数を100個作成
    repeat 100
        newmod mv, test, 1
    loop
    // モジュール変数を全て削除
    foreach mv
        delmod mv.cnt
    loop
    // モジュール変数の配列の拡張は100個のまま
    mes "モジュール変数の配列の数:" + length(mv)
    // モジュール変数を再作成
    dimtype mv, vartype("struct")
    // モジュール変数が作り直され配列が1に
    mes "モジュール変数の配列の数:" + length(mv)

この様にモジュール変数を使用する事で 手軽に変数の領域を解放する事が出来るので、マメに開放をしたいという方には良さそうです。

さらに一時期流行ったメモリ解放ソフトなんかも割と楽に作る事が出来るかもしれませんね(現在のPC環境での必要性や、そもそもの効能の是非に付いては置いといて(笑))。

モジュール変数にする事で直接変数にアクセス出来なくなる不便も有るので、何でもかんでもモジュール変数化すれば良いと言う訳では無いと思いますが、モジュール変数を開放する目的のために使うやりかたは 特質や状況を見極めればどこかしら利用する価値は有るかもしれません。
スポンサーサイト
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。