Anuncios

Bienvenidos sean a este post, hoy continuaremos con el analisis de memoria.

Anuncios

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;
}
Anuncios

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:

FuncionDireccionVariableValor
main1bapunta a la direccion 0
0a42
Anuncios

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);
}
Anuncios
Anuncios

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:

FuncionDireccionVariableValor
3c32
funcion2iapunta a la direccion 0
1bapunta a la direccion 0
main0a42
Anuncios
Anuncios

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.

Anuncios

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.

Anuncios
pp258

Donación

Es para mantenimento del sitio, gracias!

$1.50