Bienvenidos sean a este post, hoy continuaremos con el analisis de memoria.
Hasta los posts anteriores hemos visto como trabajan tanto la memoria stack como la heap, sus diferencias y sus pros y contras entre ellos, pero hoy nos adentraremos en ver otras formas de como se asigna los datos en memoria, vamos a tomar el siguiente codigo de ejemplo:
fn main
{
let a = 42;
let b = &a;
}
En este caso tenemos una variable definida y luego definimos otra variable donde le asignamos el valor de la variable anterior por medio de un apuntador, si lo volvemos a ver a traves de la tabla que vimos en los posts anteriores seria algo asi:
Funcion | Direccion | Variable | Valor |
main | 1 | b | apunta a la direccion 0 |
0 | a | 42 |
Tal como nos imaginamos no se hace una copia del valor de la variable a en la variable b sino que en su lugar se apunta a la direccion de memoria donde esta almacenada el valor de la variable a, en este caso cada vez que modifiquemos el valor de a tambien se modificara el valor de b y viceversa dado que comparten la misma direccion de memoria, ahora veamos el siguiente codigo:
fn funcion(i: &i32)
{
let c = 32;
println!("{}", *i);
}
fn main
{
let a = 42;
let b = &a;
funcion(b);
}
Es la base del ejemplo anterior pero con un par de agregados, primero agregamos una nueva funcion pero que esta vez recibira un argumento y a su vez con el operador de referencia, dentro de este bloque definiremos una nueva variable y mostraremos el valor que recibimos en el argumento, la otra diferencia esta en el main donde llamamos a la funcion anterior pasando la variable b como argumento y a su vez con la misma estructura del ejemplo anterior, vamos a crear un nuevo cuadro para ver como trabaja la memoria:
Funcion | Direccion | Variable | Valor |
3 | c | 32 | |
funcion | 2 | i | apunta a la direccion 0 |
1 | b | apunta a la direccion 0 | |
main | 0 | a | 42 |
Veamos un par de detalles, la variable a sigue con su direccion de memoria y su valor, con la b seguimos apuntando a la direccion de a, ahora si vemos las variables de la funcion observemos que c tiene su propia direccion y esta almacena su valor, en cambio la variable del argumento i no tiene un valor dado que apunta a la direccion de la variable a, recuerden que informamos a b y esta tampoco tiene un valor sino un apuntador a la variable a, pero la variable i tambien tendra su propia direccion de memoria, por lo tanto podemos decir que todas las variables siempre tendran un lugar en memoria pero su contenido dependera de si lo informamos o usamos una referencia.
En resumen, hoy hemos visto como maneja la memoria a la hora de utilizar variables con apuntadores, tambien hemos visto como la maneja a traves de un argumento informado en una funcion y algunas conclusiones sobre nuestras variables en memoria, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.50
