LSL Script Memory/es
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
Memoria de Script
Todos los scripts en LSL comienzan con 16 kilobytes de memoria y esa memoria se usa rápidamente. Abajo está una lista de código y uso de memoria.
Todos los datos a continuación fueron compilados usando llGetFreeMemory(). Como el compilador de LSL no es un programa simple, los datos abajo pueden no ser 100% correctos. De hecho, parte de los datos son incorrectos y necesitan correciones.
Todavía quedan partes que pueden mejorarse y muchas más que necesitan detalles adicionales. Si alguien tiene tiempo y no sabe que hacer, juege con el uso de memoria para diferentes funciones. Una lista de actualizaciones necesarias se encuentra al final de la página.
Variables
Declarando variables como globales
Uso de Memoria de Variables
integer 10 float 10 string 18 + 1 por carácter key 18 + 1 por carácter vector 18 rotation 22 list 21 + lista de uso de memoria
Lista de Uso de Memoria
integer 15 float 15 string 12 + 1 por carácter key 12 + 1 por carácter vector 23 rotation 27 list Las Listas no pueden contener otras listas
Declarando variables dentro del estado predeterminado
Uso de Memoria de Variables
integer 15 float 15 string 12 + 1 por carácter key 12 + 1 por carácter vector 31 rotation 39 list 15 + lista de uso de memoria
Lista de Uso de Memoria
integer 7 float 7 string 4 + 1 por carácter key 4 + 1 por carácter vector 23 rotation 30 list Las Listas no pueden contener otras listas
Simplemente declarando valores
Colocando un Valor en la Pila (Stack)
Integers 1 + 4 bytes para el valor Float 1 + 4 bytes para el valor String 1 + bytes por carácter + 1 byte para nulo Key 1 + bytes por carácter + 1 byte para nulo Vector 1 + 3 * float cost Rotation 1 + 4 * float cost List 1 + 4 para la longitud de la lista + uso de lista de memoria
Remover un valor de una pila cuesta 1 byte.
Lista de Uso de Memoria
Integers 7 Float 7 String 4 + 1 por carácter Key 4 + 1 por carácter Vector 23 Rotation 30 list Las listas no pueden contener listas
Constantes
Todas las contantes de número entero usan 6 bytes de memoria.
Otras Constantes
ZERO_VECTOR 16 ZERO_ROTATION 21 NULL_KEY 39
Extras
6 bytes para variables de referencia
Ejemplos
integer i; //10 bytes default { state_entry() { list l = ["Testing", "This"] //15 (list) + 15 (string) + 8 (string) } }
Funciones
Declarando funciones
Las funciones requieren 16 bytes para crearse con 3 bytes por parámetro, además del tipo de retorno.
Tipos de retorno
integer 4 float 4 string 4 key 4 vector 20 rotation 27 list 4
Declarando variables en funciones
Uso de Memoria de Variables
integer 11 float 11 string 8 + 1 por carácter key 8 + 1 por carácter vector 19 rotation 23 list 11 + lista de uso de memoria
Lista de Uso de Memoria
integer 7 float 7 string 4 + 1 por carácter key 4 + 1 por carácter vector 23 rotation 30 list Las listas no pueden contener listas
Llamando funciones
21 bytes para llamar a una función sin retorno
21 bytes para llamar a una función con cualquier retorno + tipo de retorno
Reste el número de parámetros ingresados
Tipos de Retorno
integer 2 float 2 string 10 + 1 por carácter devuelto key 10 + 1 por carácter devuelto vector 2 rotation 2 list 18 + lista de uso de memoria
Ejemplos
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) } }
Operadores
Lista de Operadores
+ 1 - 1 * 1 / 1 % 1 & 0 | 0 ^ 0 ! 0 >> 0 << 0 ~ 1 == 1 <= 1 < 1 >= 1 > 1 != 1
Asignación
Asignar valores a variables toma muchos bytes como son menos uno.
Examples
string s; //12 bytes s; //6 bytes ""; //3 bytes (vea a continuación) s = ""; //8 (6 (string) + 3 (null string) - 1) bytes
Pero...
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)
Declaraciones
if 6 while 11 for 11 do 6 jump 5 @ 0 state 5
Ejemplos
if (5 < 10) { // 6 (if) + 6 (integer) + 6 (integer) + 1 (compare) //Haz algo aquí }
while (1 < 2 & 3 < 4) { // 11 (while) + 4*6 (4 integers) + 2 (2 compares) //Haz algo aquí }
Moldeado de Tipos (Typecasting)
integer 10 float 10 string 10 key 10 vector 10 rotation 10 list 25
Estados
14 bytes por cualquier event en un estado + 1 por cada parámetro 17 bytes para crear un estado nuevo
Actualizaciones Necesarias
Se necesitan varias actualizaciones para esta página. Las más urgentes se encuentran a continuación:
- Verificar todos los datos
- Aclaración de explicaciones
- Investigar como trabajan las funciones
- Llamar funciones
- Como los tipos de retorno afectan los valores devueltos
- En el código a continuación, la llamada llGetFreeMemory() regresa un valor diferente. ¿Cómo se afecta? ¿Por qué?
default { state_entry() { llOwnerSay((string)llGetFreeMemory()); list l = ["", "", "", ""]; llOwnerSay((string)llGetFreeMemory()); } }