その6
変数名、ラベルの扱い
Advシステムではいつ・どこでセーブされるか分かりません。
whileループの途中で割り込みが入って、そこでセーブされてもロード時にはメモリ内容が再現されなければなりません。
さらにパッチで変数を追加されても識別できるように、変数は名前ごと保存する必要があります。
while(true)
{
if (++i<0) {
!ここで割り込みが発生→セーブret = i;
...
}
}
そのままだと 読み込みや参照に時間が掛かってしまうので、安全に名前を短縮したいです。
そこでハッシュを用います。
CRC32にでも変換してDWORD型に放り込みます。
1,073,741,824バイトの変数名であっても、コンパイル後には4バイトです。
実行時には変数名を全てテーブルで管理し、参照を1発でできるようにします。
スクリプトコード中の変数をインデックスに置換する感じです。
パッチ関係で頑張るならコンパイル時にこれしても良いんですが
その後のアフターケア(コードの逆コンパイルとか)を考えると面倒なので…。