LSL Script Memory/es

=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 menos uno.
===Ejemplos===
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 evento 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é?
<pre>
default {
 state_entry() {
 llOwnerSay((string)llGetFreeMemory());
 list l = ["", "", "", ""];
 llOwnerSay((string)llGetFreeMemory());
 }
}