|
シャシャリデルー (^^;)) )))))...|| ROM の世界 ||
●arytest.mac について
>配列アクセスの速さを、測ってみました。 不思議な結果で
>要素数に比例して均等に遅くなる。 log(N) でもないし 先頭が早い
要素数に比例している部分もあります。
> #s=16;// 16,32,64,128 としてみる
> #x=-1;while(#x<#s){#x=#x+1;$s[#x]="99999999999999999999";}
配列操作ではなく、文字列のサイズに注目しました。
この $s[#x] に代入している文字列を、もっと大きなサイズにしてみます。
//環境は P-166MMX, 32MB
$result = str(#t2-#t1)+","+str(#t3-#t2)+","+str(#t4-#t3)+","+
str(#t5-#t4)+","+str(#t6-#t5)+","+str(#t7-#t6);
#s = 16; // $s[#x]=20 バイト
1112,1456,1304,1291,5741,5809
#s = 16; // $s[#x]=40 バイト
1373,1800,1593,1579,6867,6935
#s = 16; // $s[#x]=80 バイト
1881,2458,2170,2156,9133,9201
要素数に比例して遅くなる(純粋な配列操作の)側面と、変数に代入している文字列
の総量に比例して遅くなる側面があるように見えます。#s が一定なので明白。
純粋に文字列の大きさがマクロにどのような影響をあたえるか調べたくなります。
●なんでやねん.mac
// $s に代入する文字列を 500, 1000, 2000 バイトとかにします。
$s = "大きなサイズの文字列";
##i = 0;
##t1 = tickcount;
while( ##i < 1000 ){
// $d = rightstr($s,1); // <- これは関係させずに、
##i = ##i + 1; // たんにループさせるだけ。
}
##t2 = tickcount;
insert str(##t2 - ##t1) + "\n";
beep;
endmacro;
「なんでやねん.mac」の結果は以下の通りです。
500バイト => 303
1000バイト => 494
2000バイト => 948
ではでは。...((((( ((;^^)テッシュウ || ROM の世界 ||
|
|