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


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0914
ぴょぴょ(科学太郎)変数サイズの取得について4未解決


ぴょぴょ(科学太郎)

リンク

2014/9/14(Sun) 12:38:45|NO.64917

次のサンプルを実行すると
*Init
dim a,1 dim b,10 dim c,100 dim d,1000 dim e,10000 *Main title "変数サイズの取得サンプル" dupptr size,varptr(a)-16,4:mes strf("a=%d",size) dupptr size,varptr(b)-16,4:mes strf("b=%d",size) dupptr size,varptr(c)-16,4:mes strf("c=%d",size) dupptr size,varptr(d)-16,4:mes strf("d=%d",size) dupptr size,varptr(e)-16,4:mes strf("e=%d",size) stop
次のようになります。
a=64
b=64 c=400 d=4000 e=40000

どうして「a=4」、「b=40」とならないのでしょうか?
なお、文字列はマニュアルより、最低でも 64 バイト確保されることは知ってます。
なぜ?



この記事に返信する


y.tack

リンク

2014/9/14(Sun) 15:40:48|NO.64923

配列は最低 64byteだか64要素だか確保する仕様(?)だと思います
それ未満で確保しても使ってない領域が細切れで残るから か
細かく開放/再確保するのは無駄だから からだと思います

ちょっと確保されてるのが
64byteだか64要素だか わかりませんが
仕様通りの結果が表示されてると見受けられます



ぴょぴょ(科学太郎)

リンク

2014/9/14(Sun) 16:12:55|NO.64924

・バグを知ってバグを断つ「knowbug」
http://prograpark.ninja-web.net/CollectField/index.html

現在、上から10番目のデバッグ・ウインドウをインストールしてます。

この新しいデバッグ・ウインドウには、変数をクリックすると
変数名:a
変数型:int (1) アドレス:0x01D45CF0, 0x00000000 サイズ:using 4 of 4 [byte] a = 0 (0x00000000) dump 0 1 2 3 4 5 6 7 8 9 A B C D E F ---------------------------------------------------- 0000 00 00 00 00
と表示されます。

そのため内部では「64byteだか64要素」ではないように思います。
そもそも、なぜ「varptr(a)-16」のアドレスにサイズ情報があるのですかね。
過去ログを調べたら出てきたので、現在、変数のサイズを調べるモジュールを作成中です。

次の「http://chokuto.ifdef.jp/urawaza/struct/PVAL2.html」サイトに
> HSP が管理している変数についてのさまざまな情報が格納されます。
> 1つの変数につき、1つの構造体が存在します。
> この構造体のデータは、 mref 命令を用いて取得することができます。
と書かれてます。
でも、mref 命令ではBMSCR構造体、HSPCTX構造体の2つの構造体しか取得できません。
どうやって変数のPVAL2構造体を取得するのですか?



zakki

リンク

2014/9/14(Sun) 17:12:54|NO.64925

実装依存で推奨されなさそうですが、STRINF構造体のsizeを読んでますね。
http://dev.onionsoft.net/trac/openhsp/browser/trunk/hsp3/strbuf.h#L22

文字列にかぎらずsbAllocを使うのでSTRBUF_BLOCKSIZE分(=64バイト)は確保されます
http://dev.onionsoft.net/trac/openhsp/browser/trunk/hsp3/hspvar_int.cpp#L93
http://dev.onionsoft.net/trac/openhsp/browser/trunk/hsp3/strbuf.cpp



skyblue

リンク

2014/9/15(Mon) 09:00:33|NO.64957

>でも、mref 命令ではBMSCR構造体、HSPCTX構造体の2つの構造体しか取得できません。
>どうやって変数のPVAL2構造体を取得するのですか?
mrefの1024番で取得できるそうです。未保証ですけど



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