ソラマメブログ

2008年07月26日

リストに関するハックの検証

l = (l = []) + l + "0123456789"; のようにすると より多くの要素を保持することができる
-----
という ハック があるらしいので試してみた
-----
まず 普通にやると上限はいくつか試してみた
-----
使ったのは下記のスクリプト
//
// File: list_test.lsl
// Date Author number of nodes
// 2008/7/25 walkinglint 12
//
integer i = 0;
list l = [];
default {
on_rez(integer param) {
llResetScript();
}
touch_start(integer total_number) {
llOwnerSay((string)llGetFreeMemory());
for (i = 0; i < 0x7fffffff; i++) {
l = l + "0123456789";
if (llGetFreeMemory() < 1000) {
llOwnerSay((string)i);
}
}
}
}
実行するとこうなった
-----

-----
336個まで保持できた
-----
そこで ハック を使ってみる
-----
リストは こう
//
// File: list_test.lsl
// Date Author number of nodes
// 2008/7/25 walkinglint 12
//
integer i = 0;
list l = [];
default {
on_rez(integer param) {
llResetScript();
}
touch_start(integer total_number) {
llOwnerSay((string)llGetFreeMemory());
for (i = 0; i < 0x7fffffff; i++) {
l = (l = []) + l + "0123456789";
if (llGetFreeMemory() < 1000) {
llOwnerSay((string)i);
}
}
}
}
代入部分だけが異なっている
-----
実行するとこうなった
-----

-----
481個 331個と比較すると 1/3 多く保持できている なるほど
-----
実際 中に要素が含まれているか確認すると
-----

-----
ちゃんと入っている... 意味的には 最初に クリアしているので 1つしか保持していないんじゃないかと思われるのだが w

同じカテゴリー(walking のスクリプティング講座)の記事
 プロフィール写真の表示に問題 (2009-11-30 20:55)
 ミニ太陽系 (2009-03-21 06:03)
 関数から文字列を返したら何か問題になる? (2009-03-18 18:02)
 llListFindList って型って関係ないんだったっけ (2009-03-18 14:02)
 夏時間(PDT)の実験 (2009-03-08 22:04)
 15パズルの作り方(その3) (2009-03-08 06:03)
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。