内部的にはWindowsAPIのHeapAlloc関数やdupptr命令等を駆使して、
それぞれの型,値,サイズなどの情報を自前のヒープ領域に保持しています。
そのサイズ情報について、文字列型はstrlen,実数型は8byte,後は一様に4byteとして
算出可能と思っていたのですが、どうやらモジュール型変数のサイズは固定ではなく
プロパティ(モジュール変数)を内包していてモジュール毎に可変らしいことが分かりました。
私の環境ではモジュール変数が一つ増える毎に実体のサイズが48byte程度増えます。
(以下の検証コードより推測)
前置きが長くなりましたが、モジュール型変数の実体サイズを得る方法はあるのでしょうか。
onerrorをキャッチすれば強引に取得できないこともないですがあまりやりたくありません。
::検証コード
/* - 同じモジュール型変数を二つ用意してaからbにコピーする - その推移を幾つかのモジュール変数をダンプしてチェックする - ループ中にエラーが出たらそこが実体サイズと判断する */ #module Mod m_str1, m_str2;, m_str3 // アンコメントで約48byteコピー量が増える #modinit str _s1, str _s2 m_str1 = _s1 m_str2 = _s2 return #modfunc output mes strf("str1: %s, str2: %s", m_str1, m_str2) return #global newmod a, Mod, "complete1", "complete2" newmod b, Mod, "yet", "yet" repeat offset = 4 * cnt title strf("%d~%d byte", str(offset - 4), str(offset)) lpoke b, offset, lpeek(a, offset) output b wait 10 loop