HSP命令講座 <memexpand命令>

Last Update : 2008/02/xx

PR HSPの書籍 『逆引き HSP3プログラミング事典 応用編』

memexpand命令 (文字列型変数のバッファサイズ拡張)

 文字列型変数のバッファサイズを再確保します。命令名の由来は、「memory expand」(メモリ拡張)から。

 memexpand バッファ変数, 確保するバイトサイズ

 第1パラメータには拡張対象の変数、第2パラメータには確保するバッファサイズ(64〜)をバイト単位で指定します。

 変数という名の「入れ物」に想定以上のデータが代入されると、バッファの自動拡張がHSP内部で行われます。ただ、この機能にべったり頼ると、処理パフォーマンス(動作スピード)にモロに響くことになります。一方で、自動拡張機能を行わない命令の場合は、「バッファオーバーフローが発生しました」(エラー番号20)というHSPエラー(HSP内部エラー)が表示されます。

 バッファの自動拡張機能を発動させない方法は、sdim命令で文字列型変数の領域をあらかじめ確保しておきます。ただ、この命令は呼ぶたびに変数の中身が初期化されてしまうので、中身のデータを維持したままバッファサイズのみ拡張できるのがこのmemexpand命令です。(バッファサイズの縮小は不可能)

↑TOP↑

サンプルソースコード

 まず、sdim命令のバッファサイズ確保です。64バイト→128バイトのサイズを確保すると、当然ながら中身の文字列データはなくなってしまいます。

;	バッファサイズを確保(64バイト)
	sdim buf

	buf = "HSPのmemexpand命令の解説だよーん"

;	バッファサイズを確保(128バイト)
	sdim buf, 128

	mes "["+buf+"]"

 逆にmemexpand命令は中身の文字列を維持したままバッファサイズを2倍に拡張できます。スクリプトエディタのデバッグウィンドウで変数bufを必ず確認してください。

;	バッファサイズを確保(64バイト)
	sdim buf

	buf = "HSPのmemexpand命令の解説だよーん"

;	バッファサイズを再確保(128バイト)
	memexpand buf, 128

	mes "["+buf+"]"

 sdim命令で用意した「入れ物」からデータが溢れる(=「バッファ・オーバーフロー」)ような状況になりそうなら、直前にmemexpand命令を使って「入れ物」の大きさを拡張させることで、処理パフォーマンスを落とさずに済みます。

↑TOP↑

〜HSP3 あれこれ〜
ウィンドウ | オブジェクト | ファイル | フォルダ | キーボード | マウス | メニュー | システム | 文字列 | COM | その他

Copyright © 2005-2011 ゲーム作成ソフトHSPの情報をいろいろと Let's HSP!. All rights reserved.