HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0824
にゃんちゃんラベルの数と処理速度5解決


にゃんちゃん

リンク

2015/8/24(Mon) 15:58:46|NO.71031

こんにちは。
HSPの仕様に詳しい方がいらっしゃいましたら教えてください。
HSPは、基本的にオブジェクトファイルをリアルタイムで読み進めながら実行していると思います。ですので、処理速度に関しては、ソースコード全体が500行だろうが50000行だろうが、今やっている処理がどれくらい高付加であるかがネックだと思っています。
そこで、ラベルジャンプについて考えてみました。ラベルジャンプの処理の仕様はよく分からないのですが、たぶんラベルとオフセットのテーブルみたいなのがあって、そこから位置を探してきて、処理のポインタをそこに動かすみたいなことをやっているのではないかと予想しています。もしそうだとすると、ラベルが増えていくとオーバーヘッドが増えて、処理速度が低下していくのではないかと思うのですが、ラベルを使いすぎると処理は遅くなったりしますか?
ラベル型変数を使いまくっていると、どんどんラベルが増えていって、どうしようかとおもっています。よろしくお願いします。



この記事に返信する


Snake

リンク

2015/8/24(Mon) 16:25:14|NO.71033

>たぶんラベルとオフセットのテーブルみたいなのがあって
>そこから位置を探してきて、処理のポインタをそこに動かすみたいなことを
>やっているのではないか
いいえ、ラベルとオフセットのテーブルのようなのはありません。
代わりに、ラベルは関数の始まりとして解釈されます。
基本的には、HSPコンパイラでは*hataをC言語のvoid void_0001()みたいなものに変えています。
そもそもHSPはC言語で作成されたので、HSP言語→C言語用に変換する必要があるんです。
そこで、先ほども言ったように

*hata
を、コンパイラでは

static void L0001()
のように解釈しています。ただ関数を宣言する
ちょっと難しいでしたか?



Snake

リンク

2015/8/24(Mon) 16:29:35|NO.71034

訂正
>C言語
>void void_0001()
の部分は
>C++言語
>static void L0001()
でした。



tds12

リンク

2015/8/24(Mon) 17:31:10|NO.71038

>たぶんラベルとオフセットのテーブルみたいなのがあって
そのとおりです。
http://dev.onionsoft.net/trac/openhsp/browser/trunk/package/win32/hspsdk/hsp3code.txt
「ラベルとオフセットのテーブル」にあたるのが、
axファイル上の"Object Temp(OT)"と呼ばれるものです。

>いいえ、ラベルとオフセットのテーブルのようなのはありません。
いいえ、あります。

>HSP言語→C言語用
>static void L0001()
これはDish Helperを使った場合ですね。
しかしこの場合でも、__HspTaskFuncという配列が確認できると思います。

>ラベルが増えていくとオーバーヘッドが増えて、
>処理速度が低下していくのではないかと思うのですが、
>ラベルを使いすぎると処理は遅くなったりしますか?
遅くなりはしないと思います。
axファイル内のコード部分で、
1番めのラベルは0という数値で表され、
ot配列の0番目に格納されたコードへのアドレスを元に、
ジャンプします。
たとえ1000番目のラベルでも、
ot配列の999番目を直接読むだけなので、
オーバーヘッドは変わりません。

openhspをみて調べたので、大丈夫だとは思いますが、
どこか間違っていれば、
もっと詳しい方が指摘してくださるとありがたいです。



にゃんちゃん

リンク

2015/8/24(Mon) 20:56:05|NO.71039

ご回答ありがとうございます。
Dish上で動かす場合には、スマホでの実行が想定されていて、HSPランタイムが直接動かせないので
void ラベル番号()
という感じに各ラベルを関数化して処理していると理解しました。こっちがSnakeさんの回答してくださったほうですね。

オフセットの参照方法の件、わざわざ調べてくださってありがとうございます。以前別件でhsp3code.txtの中身を流し読みしていたときに、OTの説明の中に「オフセット」って書いてあったのを思い出して、ラベルジャンプの仕様を推測していました。ですが、こういう資料をあまり読みなれておらず、ジャンプ方法まで読み解けていませんでした。とてもすっきりしました。
お二方ありがとうございました。解決です。



にゃんちゃん

リンク

2015/8/24(Mon) 20:59:12|NO.71040

>__HspTaskFunc
あ。Dishでも一応それっぽい物はできるんですね。それだったら、上のDish実行の解釈はちょっと違ったかも。



ONION software Copyright 1997-2023(c) All rights reserved.