HSP Tips 5

Last Update : 2008/02/xx

HSP (v2.x/v3.x) の全般的なプログラミング情報トピックスいろいろですー。

実行ファイルのサイズを小さくする

 HSPはインタプリタ型の言語(プログラミングツール)なため、stop命令だけでも100KBほどのサイズの実行ファイルが生成されます。これは、HSPの実行ファイルが、[HSPランタイム]+[DPMファイル]というファイル構造になっているだめです。[DPMファイル]は、start.axを変換したものやPACKFILE機能で埋め込んだファイルになります。

 常時接続&大容量ブロードバンド環境が普及している状況の中、もはや実行ファイルのサイズを気にする必要性は少くなくなっていますが、簡単にファイルサイズを抑制するちょっとしたテクニックを。

[0] 余計なファイルをPACKFILE機能で埋め込まない

 埋め込む必要性のないファイル、たとえばソースファイルをわざわざ埋め込んでいる人もいるようで。くれぐれも変な(?)ファイルを含めませぬよう・・・。(→ 参照、HSP Tips : パックファイルに入れるデータ)

[1] スクリプトの書き方を変える

 ほんの数バイト単位での違いですが、スクリプト(命令)の書き方でサイズが違います。一例として下のトピックスを参照してください。

[2] 拡張ランタイム hsp3c.hrt / hsp2c.hrt を利用

 HSP3には拡張ランタイム(*.hrt)として、COM関係の命令とその他一部命令を削ったコンパクト版ランタイムファイル hsp3c.hrt が提供されています。このランタイムを利用すれば、通常よりも25KBほど小さなサイズの実行ファイルが生成できます。HSP2の場合は、hsp2c.hrt ファイルを。なお、拡張ランタイムはHSPのバージョンごとに対応したものを使用する必要があります。

 HSPプログラミングマニュアルの「1.プログラミングガイド」→「拡張ランタイム」項を参照してください。(HSP3はプリプロセッサ命令「#packopt」を使用し、「実行ファイル自動作成」)

[3] 実行ファイルをUPXで圧縮

 「UPX」は、実行ファイル圧縮ソフト(パッカー)と呼ばれるプログラムで、ZIP形式とかLHA形式のようなアーカイブ形式と違って、実行ファイル(Windows Executable File)そのものを実行可能ななまま圧縮し、ファイルサイズを小さくすることができる機能を持っています。(@_@)

 ただ、このようなパッカーはHSP製実行ファイルに対してデフォルトで対応していません。HSP製実行ファイルには、内部にファイルサイズをチェックする機構があり、普通に利用するとその部分が引っかかって起動できなくなってしまいます(「Stratup Failed.」エラー)。

 しかし、拙作ツール 「Let's HSPUPX!」 のバージョン 1.7 において、HSP 3.0でコンパイルされた実行ファイルのUPX圧縮に対応しています。ちょっとしたプログラムであれば、通常で3ケタKBのところが圧縮後に2ケタKBぐらいのサイズになると思います。

↑TOP↑

ファイルサイズの最適化

 実行ファイルのサイズを少しでも小さくしたい場合のちょっとしたテクニック。サイズの違いを見たい場合は、start.axのファイルサイズをチェックしましょう。基本的にこのファイルが実行ファイルのサイズに反映されます。

全く使用していないラベルの削除 -4 バイト
初期値が決まっている命令の引数の無指定 <HSP2> -2 バイト
<HSP3> -4 バイト
「""+abc+""」 を 「""+abc」 に変更 <HSP2> -5 バイト
<HSP3> -9 バイト
「if (a = 1) | (b = 1)」 を 「if a = 1 | (b = 1)」 に変更 <HSP2のみ> -4 バイト

 逆に実行ファイルのサイズに何ら影響のない(=動作スピードに影響しない)ものには、以下のようなものがあります。

「a=1」 と 「a = 1」 のような単なるスペースの違い
「a ! 1」 と 「a != 1」 、「a = 1」 と 「a == 1」 のような違い
「aaaaa = 1」 と 「a = 1」 のような変数名の文字数の違い
「*aaaaaa」 と 「*aa」 のようなラベルの文字数の違い
「data = "abc"」 と 「data = "abc」 の違い
コメントアウト(「;」、「/* 〜 */」、「//」) や 改行 の量
「:」を利用して1行に多数の命令を書くか、1行につき1命令か
mes命令 と print命令

 また、v2.6以降でサポートされた拡張マクロを全く使用しない場合は、commonフォルダ の hspdef.asを別名にリネームしておきましょう。これだけでHSP2の場合-10バイトのサイズ減少です。これは使用するしないに関わらずこのファイルを読み込む仕様になっているためです。

 HSP3の場合、メニューの[HSP]→[HSP拡張マクロを使用する]のチェックの有無で大きな変化があるようで、チェックなしの場合、チェックありと比べるとだいたい180バイト分大きくなります。

=-=-=-=-=

 HSP 3.1から導入されたスクリプト最適化機能。これは生成された実行ファイルの処理そのもののスピードが上がるというわけではなく、未使用の「#func」と「#cfunc」を排除してコンパイルする機能です。

 たとえば、「kernel32.as」や「user32.as」など大量のヘッダーデータを含んでいるファイルをインクルードした場合、ファイルサイズにかなりの影響がありましたが、この機能によりその問題が解決されました。

 この機能の制御は、プリプロセッサ命令「#cmpopt」のオプション名「optcode」で選択できます(デフォルトで有効)。そして、最適化機能ではありませんが、オプション名「ppout」は、hsptmp.iファイルを出力可否の選択です。hsptmp.iファイルは、start.axファイルに変換される直前に近いファイルで、定数マクロやインクルードなどが完全に反映された状態のスクリプトファイルです(デフォルトでは出力無効)。

↑TOP↑

音楽ファイルの再生

 音楽ファイルを再生することができるHSP3の命令、HSP向け拡張プラグイン(DLL/HPI)、汎用ライブラリ(DLL)をテキトーに拾ってみーる。音楽再生専門のプラグインや、描画関連プラグインの付随機能として提供されているもの、などなど。

 アンダーラインつきの「O」は、メモリ上の音楽ファイルの読み込みができることを示しています。つまり、HSPのPACKFILE機能で実行ファイル内に埋め込んだデータを利用できます。(これに関しては、きっちり調べたわけではないので間違えてる可能性あり)

名称 音楽形式
WAVE MIDI MP3 WMA OGG

mmload (HSP標準) O O O O -
mci (HSP標準) O O O O -
SMFプレイヤーモジュール - O - - -






HGIMG3 <HSP3 拡張ランタイム> O - - - O
HSPOGG <HSP3> O - - - O
Easy3D O O - - -
CWSDRV O O - - -
HSP MULTIMEDIA hmm.dll O O - - O
KexMP3.dll - - O - -
HSP DirectSound Extension O - O - -
DirectSound再生プラグイン for HSP O - - - O
ppshow.hpi O O O O -
ZGPDM O O - - -
ZGPSW O O O O -
GuruGuruSMF - O - - -
Vox - - - - O
ovplay.dll O - - - O




VBMP3 O - O - -
BASS O - O - O
FMOD O O O O O

 ちなみに、画像ファイル関係の拡張プラグイン一覧はこちら。(→ 参照、HSP Tips : 画像ファイルの表示)

↑TOP↑

<< HSP Tips 4 || HSP Tips 6 >>

Copyright © 2005-2012 . All rights reserved.