tag:blogger.com,1999:blog-648738693838588387.post7070522884869562743..comments2022-02-16T12:04:02.694+09:00Comments on HSP3のスクリプトを垂れ流すブログ: lstrlenAとstrlenの速度比較ellerhttp://www.blogger.com/profile/07429654819789962794noreply@blogger.comBlogger6125tag:blogger.com,1999:blog-648738693838588387.post-43785201273722854172008-01-04T16:19:00.000+09:002008-01-04T16:19:00.000+09:00些細なことですが訂正。主にsizeof演算子ではなくポインタでした。HSPCTX ctx;print...些細なことですが訂正。<BR/>主にsizeof演算子ではなくポインタでした。<BR/><BR/>HSPCTX ctx;<BR/>printf("prmstackの位置 %d\n", (int)&ctx.prmstack - (int)&ctx);<BR/><BR/>わからなかったところは開発wikiで補いました。<BR/>明日あたり反映させます。ellerhttps://www.blogger.com/profile/07429654819789962794noreply@blogger.comtag:blogger.com,1999:blog-648738693838588387.post-953329705738479232008-01-04T10:01:00.000+09:002008-01-04T10:01:00.000+09:00VC++2005にてsizeof演算子を使用して調べた結果(中間報告):_hspctx(207)がp...VC++2005にてsizeof演算子を使用して調べた結果(中間報告):<BR/><BR/>_hspctx(207)がprmstackのポインタ<BR/>_vptrがprmstack<BR/>_pvalが第1引数を表すPVAL構造体<BR/>_aptr=_vptr(1)が第1引数の配列の要素(s(n)を_strlenに渡すと_aptrがnになる)<BR/>_pval(7)がptr to array<BR/>_pval(8)がMaster pointer for data<BR/><BR/>_pval(8)+_aptr*4と_pd-24と_pval(7)-24を調べる内に時間切れになりました。<BR/>おそらく1つめが調べる配列へのポインタ、残り2つが変数が確保しているメモリサイズだと思うのですが。<BR/>_pval(7)&_pval(8)の指す内容がまだ理解できていません。ellerhttps://www.blogger.com/profile/07429654819789962794noreply@blogger.comtag:blogger.com,1999:blog-648738693838588387.post-45911203341109896132008-01-03T20:57:00.000+09:002008-01-03T20:57:00.000+09:00shark++さん、書き込みありがとうございます。memchrの意味は分かりましたが構造体のサイズが...shark++さん、書き込みありがとうございます。<BR/><BR/>memchrの意味は分かりましたが構造体のサイズが分からなかったため、_hspctx(207)や_pval(8)などが何のポインタなのかわからないため、もう少し調べてみます。<BR/>構造体のサイズ取得方法(sizeof)も理解できましたし、いい勉強になりました。<BR/><BR/>すべて理解できましたら、memchrおよびtimeBeginPeriod/timeEndPeriodを使用したスクリプトを載せたいと思います。ellerhttps://www.blogger.com/profile/07429654819789962794noreply@blogger.comtag:blogger.com,1999:blog-648738693838588387.post-53013782042931742172008-01-03T12:31:00.000+09:002008-01-03T12:31:00.000+09:00マルチバイト文字列限定ですがこんな方法もあります。#module#uselib "ntdll.dll...マルチバイト文字列限定ですがこんな方法もあります。<BR/>#module<BR/>#uselib "ntdll.dll"<BR/>#func memchr "memchr" var, int, int<BR/>#defcfunc _strlen var _p1<BR/> ; バッファサイズを取得[簡易版](ref:小ワザ/ポインタを使ってのあれこれ@HSP開発wiki)<BR/> mref _hspctx, 68<BR/> dupptr _vptr, _hspctx(207), 8, 4<BR/> dupptr _pval, _vptr(0), 48, 4<BR/> _aptr = _vptr(1)<BR/> if _aptr {<BR/> dupptr _pd, _pval(8)+_aptr*4, 4, 4<BR/> dupptr _strinf, _pd-24, 24, 4<BR/> } else {<BR/> dupptr _strinf, _pval(7)-24, 24, 4<BR/> }<BR/> ; 文字列長を取得<BR/> memchr _p1, 0, _strinf(2)<BR/> return stat - varptr(_p1)<BR/>#global<BR/>あとtimeGetTimeを使用する場合は timeBeginPeriod/timeEndPeriodを使用したほうが精度が高いことが多いですよ。Shark++https://www.blogger.com/profile/05497306146955895930noreply@blogger.comtag:blogger.com,1999:blog-648738693838588387.post-78319815649109119622008-01-02T16:55:00.000+09:002008-01-02T16:55:00.000+09:00書き込みありがとうございます。手元の環境でもそうなりました。sptr(またはstr)の場合は、メモリ...書き込みありがとうございます。手元の環境でもそうなりました。<BR/>sptr(またはstr)の場合は、メモリに文字列をコピーした上でそのアドレスを渡しているのでしょうね。<BR/>それならばコピーする作業分だけ遅くなると理解できます。ellerhttps://www.blogger.com/profile/07429654819789962794noreply@blogger.comtag:blogger.com,1999:blog-648738693838588387.post-19459302419815945932008-01-02T14:46:00.000+09:002008-01-02T14:46:00.000+09:00#cfunc lstrlenA "lstrlenA" varにすると lstrlenA の方が早くな...#cfunc lstrlenA "lstrlenA" var<BR/>にすると lstrlenA の方が早くなりました。<BR/>こうすると、変数のメモリアドレスを渡すだけになるので速くなる...ということなのかも。Anonymousnoreply@blogger.com