>この質問の理由は、newmodでモジュール型変数を大量に作った場合、
>使われていないモジュール変数の分も、
>メモリが確保されているのではないかという危惧からです。
>では、メモリ確保領域に違いはあるのか。
結論から言うとnewmod命令とdim宣言で確保される
メモリ確保領域のサイズは、同じです。
モジュール変数A, B, C, D, E, F, Gが定義してあり、
Aを扱う命令しか実装していなくても
モジュール変数A, B, C, D, E, F, G分、メモリ領域を確保します。
これは、C言語やJavaでも同じことです。
なので、使用しない変数は定義しないようにしましょう。
では、newmod命令とdim宣言では、なにが違うのかというと
確保するタイミングと確保したメモリ領域がプロセス終了まで確保され続けるのか
任意のタイミングで解放されるかがあります。
dim宣言の場合は、プロセス実行開始時にメモリ領域が確保され
プロセス終了まで確保され続けます。
newmod命令の場合は、プロセスを実行し、newmod命令の箇所にきたときに
メモリ領域が確保されます。
また確保したメモリ領域の解放は、delmod命令で任意のタイミングでできます。
モジュール変数というのは、C++やJAVAでいうclass(クラス)の機能を
実装したものだと思います。
(完全に同じものではありませんが類似しているので・・・)
一応C++との対応表を記載しておきます。
間違いがあればご指摘下さいm(_ _)m
HSP
#module Test A, B, C, D, E, F, G
C++
class Test {
int A, B, C, D, E, F, G;
HSP:C++
newmod:new
delmod:delete
参考文献:HSP3リファレンスブック
(著:おにたま氏、悠黒喧史、うずあじ氏 出版社:I/O BOOKS)
↓確認スクリプト
;モジュール Test
#module Test A, B, C, D, E, F, G
;コンストラクタ(初期化ルーチン)
;※newmod命令が実行されたときに、呼び出される
;引数
; なし
;戻り値
; なし
#modinit
mes "生成された"
return
;デストラクタ(終了化ルーチン)
;※delmod命令が実行されたときに、呼び出される
;引数
; なし
;戻り値
; なし
#modterm
mes "解放された"
return
;値Aを設定する
;引数
; In_A
;戻り値
; なし
#modfunc SetA int In_A
A = In_A * 10
return
;値Aを取得する
;引数
; なし
;戻り値
; 値A
#modcfunc GetA
return A
;module Test A, B, C, D, E, F, G
#global
;モジュールを生成する
repeat 10
newmod Mod, Test
loop
;モジュールに値を設定する
repeat 10
SetA Mod.cnt, cnt
loop
;モジュールから値を取得する
repeat 10
mes GetA (Mod.cnt )
loop
;モジュールを解放する
repeat 10
delmod Mod.cnt
loop
stop