FANDOM


Scripters_cafeログ


08/04/19 編集

LSLの定数はコンパイラによってすべて即値に展開されるのですが、定数によっては非常に効率が悪い処理になっています。

Chiyosukeさんのドキュメント 「3.2.7 NULL KEY の代わりに""を使う」 などを参照

上記ドキュメントでも解説されているように、NULL_KEY が即値展開されると、その箇所で毎回以下の処理が行われます。

PUSHARGS "00000000-0000-0000-0000-000000000000"
CAST string->key

PUSHARGS 命令でヒープ領域の確保と値のコピーが行われた後、ヒープのアドレスがスタックに PUSH されることになります。従って、NULL_KEY をコード中で使用すると、該当箇所で毎回ヒープの確保と解放が伴うことになります。

(その他の文字列リテラルの場合も同様です)


キー値および文字列値については、上記のようにヒープ領域が関連するため、あらかじめグローバル変数として定数を再定義しておくメリットがあります。


しかし、integer値やfloat値、vector/rotation値などはスタックだけで完結するので、即値を使用してもヒープの割り当て処理などは行われません。

定数をグローバル変数に再定義していても、グローバル変数の内容をスタックにコピーする処理が必要になるため、即値を使用した場合と処理コストはほとんど同じになります。

逆にグローバル変数として定義している分のメモリ領域が無駄になってしまいます。

Chiyosukeさんのドキュメント 「3.2.2 integer,float のグローバルと即値」 などを参照

広告ブロッカーが検出されました。


広告収入で運営されている無料サイトWikiaでは、このたび広告ブロッカーをご利用の方向けの変更が加わりました。

広告ブロッカーが改変されている場合、Wikiaにアクセスしていただくことができなくなっています。カスタム広告ブロッカーを解除してご利用ください。

FANDOMでも見てみる

おまかせWiki