LSL Script Memory/ja
< LSL Script Memory
Jump to navigation
Jump to search
Revision as of 19:28, 25 December 2007 by Asuka Neely (talk | contribs)
LSL ポータル | 関数 | イベント | 型 | 演算子 | 定数 | 実行制御 | スクリプトライブラリ | カテゴリ別スクリプトライブラリ | チュートリアル |
スクリプトの容量
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()を呼び出して返ってくるさまざまな値。どんな影響がありましたか?また、それはなぜ?
default { state_entry() { llOwnerSay((string)llGetFreeMemory()); list l = ["", "", "", ""]; llOwnerSay((string)llGetFreeMemory()); } }