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環境での必要性や、そもそもの効能の是非に付いては置いといて(笑))。

モジュール変数にする事で直接変数にアクセス出来なくなる不便も有るので、何でもかんでもモジュール変数化すれば良いと言う訳では無いと思いますが、モジュール変数を開放する目的のために使うやりかたは 特質や状況を見極めればどこかしら利用する価値は有るかもしれません。
スポンサーサイト
  • [HSP超入門] 変数2

変数の続き。

前回 変数は箱みたいな物だと書きました、
では変数とは一体何なのでしょう?
答えはとっても簡単。
それは「メモリー」です。

メモリーとはパソコンの性能表に載っているアレです。CPUが何GHzとか、HDDが何GBとか、メモリーが何GBとか、見た事ないですか?変数の内容は、そのメモリーに記憶されているのです。

ですので「箱に入れる」というよりは、紙に書いた時の様に「記録されている」と考えた方が正しいかも知れません。でも箱として考えた方が理解しやすい事もあるので、その時々に応じて 自分にとって一番分かりやすいようにイメージして下さい。
とは言うものの今は箱とイメージしても問題ないでしょう。

前回のプログラムをもう一度見てみましょう。

a=1
mes a

これはaという名前の変数に、数値の1を入れています。
この a が変数だというのは何となく分かってきたと思いますが
なんで a なのか?
それは私が適当に a と書いたからです、
実は変数には自分の好きなように名前を付ける事が出来ます!

hensuu=50
mes hensuu

さらにHSPでは日本語も付けられます。

変数=100
mes 変数

ですが何でもかんでも付けられる訳ではなく、

mes=100
mes mes

などのような HSP で既に使われる名前は付ける事が出来ません。
実行するとエラーが出ます。
それから、

5abc=1234
mes 5abc

の様に、変数の最初の文字に数字を使う事も出来ません
でもどうしても使いたい場合には数字を全角(日本語モード)で書くと一応実行させられます。
全角は数字とは見なされていないということですね。

5abc=1234
mes 5abc


今までは単純に「変数に入れる」といっていましたが、
変数にデータを入れることを、「代入する」といいます。
これからはここでも代入と言っていきますので覚えておいて下さい。


では今回はここまで
これから変数シリーズが続く予定です。
それはプログラミングにとって変数がとても大事な物だから。
地道が近道と言うヤツですね!

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。