LSL Script Memory/ja

=スクリプトの容量=
LSLにおける全てのスクリプトは16KBのメモリを使って動作し、あっというまに使い切ります。次にあるのはコードのメモリ消費量に関する一覧です。
以下のデータ全てはllGetFreeMemory()を通して観測したものです。LSLコンパイラは単純なプログラムではないため、これらのデータを実際に調整用として、十二分に用いることできるかは疑わしいです。
さらに数ビット、及びそれ以上の改善ができる手段があります。もし暇な時間があってどうすればいいのかわからなければ、さまざまな関数のメモリ消費量周りを調べましょう。このページの終わりまで掲載されているリストを必要に応じて更新しましょう。
=変数=
==変数をグローバルで宣言する==
===変数のメモリ消費量===
integer 10
float 10
string 18 + 1 per character
key 18 + 1 per character
vector 18
rotation 22
list 21 + list memory usage
===リストのメモリ消費量===
integer 15
float 15
string 12 + 1 per character
key 12 + 1 per character
vector 23
rotation 27
list Lists Can Not Contain Lists
==default stateの内部で変数を宣言する==
===変数のメモリ消費量===
integer 15
float 15
string 12 + 1 per character
key 12 + 1 per character
vector 31
rotation 39
list 15 + list memory usage
===リストのメモリ消費量===
integer 7
float 7
string 4 + 1 per character
key 4 + 1 per character
vector 23
rotation 30
list Lists Can Not Contain Lists
==初期値==
===スタックに入る値===
Integers 1 + 4 bytes for the value
Float 1 + 4 bytes for the value
String 1 + bytes for characters + 1 byte for null
Key 1 + bytes for characters + 1 byte for null
Vector 1 + 3 * float cost
Rotation 1 + 4 * float cost
List 1 + 4 for list length + list memory usage
スタックから除去するためのコストは1byteです。
===リストのメモリ消費量===
Integers 7
Float 7
String 4 + 1 per character
Key 4 + 1 per character
Vector 23
Rotation 30
list Lists Can Not Contain Lists
==定数==
全てのinteger定数はメモリを6byte使用します。
===その他の定数===
ZERO_VECTOR 16
ZERO_ROTATION 21
NULL_KEY 39
==例外==
6byte分を参照する変数
==例==
integer i; //10 bytes
default {
 state_entry() {
 list l = ["Testing", "This"] //15 (list) + 15 (string) + 8 (string)
 }
}
=関数=
==関数の宣言==
関数は作成されるときに16byte、各パラメータと返り値の型にそれぞれ3byte必要とします。
===返り値の型===
integer 4
float 4
string 4
key 4
vector 20
rotation 27
list 4
==関数内の変数として宣言==
===変数のメモリ消費量===
integer 11
float 11
string 8 + 1 per character
key 8 + 1 per character
vector 19
rotation 23
list 11 + list memory usage
===リストのメモリ消費量===
integer 7
float 7
string 4 + 1 per character
key 4 + 1 per character
vector 23
rotation 30
list Lists Can Not Contain Lists
==関数の呼び出し==
返り値なしの関数呼び出しには21byte、なんらかの返り値のある関数呼び出しには21byte。
引数の数を含めます。
===返り値の型===
integer 2
float 2
string 10 + 1 per character returned
key 10 + 1 per character returned
vector 2
rotation 2
list 18 + list memory usage
==例==
list f() { //16 (function) + 4 (return)
 list ret = [0]; //11 (list) + 7 (integer)
 return ret; 6 (list)
} 
string f() {
 return "";
}
default {
 state_entry() {
 f(); //21 (call to f) + 10 (returns string)
 }
}
=演算子=
==演算子一覧== 
+ 1
- 1
* 1
/ 1
% 1
& 0
| 0
^ 0
! 0
>> 0
<< 0
~ 1
== 1
<= 1
< 1
>= 1
> 1
!= 1
==代入==
変数への値の代入には総バイト数から1引いた分を使用します。
===例===
string s; //12 bytes
s; //6 bytes
""; //3 bytes (see below)
s = ""; //8 (6 (string) + 3 (null string) - 1) bytes
しかしながら...
string s = ""; //12 bytes
integer i; //15 bytes
i = i + 1 // 6 bytes (integer) + 6 bytes (integer) + 6 bytes (1) + 1 byte (addition) - 1 byte (assignment)
==ステートメント==
if 6
while 11
for 11
do 6
jump 5
@ 0
state 5
===例===
if (5 < 10) { // 6 (if) + 6 (integer) + 6 (integer) + 1 (compare)
//Do something here
}
while (1 < 2 & 3 < 4) { // 11 (while) + 4*6 (4 integers) + 2 (2 compares)
//Do something here
}
==タイプキャスト==
integer 10
float 10
string 10
key 10
vector 10
rotation 10
list 25
==ステート==
ステート内におけるいずれかのイベントに14byte、各パラメータ毎に+1、新しいステートを作成する際に17byte必要です。
=更新に必要なもの=
このページに幾つかアップデートが必要な場合、最も必要なものを以下に挙げます。
* 検証用の全データ
* 明確な説明
* 明確な関数の動き
** 関数の呼び出し
** 返り値の型がどんな結果を返すか
* 以下のコードで、llGetFreeMemory()を呼び出して返ってくるさまざまな値。どんな影響がありましたか？また、それはなぜ？
<pre>
default {
 state_entry() {
 llOwnerSay((string)llGetFreeMemory());
 list l = ["", "", "", ""];
 llOwnerSay((string)llGetFreeMemory());
 }
}