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

walkinglint

2008年07月26日 16:02


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 のスクリプティング講座