Bienvenidos sean a este post, hoy veremos una descripcion de la memoria en el equipo.
Una de las particularidades que son un pro y una contra de C++ es el manejo manual de la memoria. Una ventaja es que nuestros programas correran mas rapido en comparacion con C# o Java, estos tienen manejadores de memoria, pero esto tiene una desventaja. Si ocurre algun error al manejar la memoria, por ejemplo un puntero perdido, puede caer un error y terminar el programa de manera sorpresiva. Recuerden que todo lo que tenemos en nuestros codigos son direcciones de memoria, desde las variables hasta las clases, pasando por funciones, y otros elementos en los mismos.
Si bien no lo mencionamos en ningun momento, la ubicacion y remocion en memoria se realiza con el simple llamado a una funcion. Porque eventualmente una funcion necesita pasar argumentos a la memoria y estos necesitaran de un espacio en memoria. Esto se realiza de manera automatica para facilitarnos nuestros codigos, tambien se aplica cuando creamos objetos de una clase. En cualquiera de los casos, su ciclo de vida quedara atado a su actividad dentro de su rango o scope donde fueron declarados. Y seran removidos una vez que salgan del mismo. Si vienen de los posts anteriores, sabemos que la memoria se compone de varias partes como son: stack, heap o el segmento de solo lectura.
Si bien, mencionamos anteriormente que otros lenguajes tienen tecnicas para manejar la memoria de manera dinamica y nos evitan preocuparnos por como se manejan. En cambio, los desarrolladores de C++ tienen que lidiar con el manejo de memoria en el bajo nivel. Y dado que por alguna razon, C++ no provee ninguna funcionalidad para manejar memoria en alto nivel, debemos tener un conocimiento sobre la estructura y como manejarlo.
Comencemos con la parte mas baja de la memoria. Esta es basicamente un dispositivo que almacena el estado de un bit. Por esta razon, muchos lo consideran magico dado que al dia de hoy nadie sabe realmente como trabaja. Sino que es realizado automaticamente por los lenguajes, veamos un ejemplo:
int var;
double* pd = new double(4.2);
Si nos centramos en este tipo de memoria, perderemos mucho tiempo en hablar sobre algo que no tendremos ningun control, salvo que usemos lenguajes de realmente bajo nivel, y por esto pasaremos a hablar sobre la memoria. En si, no trabajamos con la memoria sino con la memoria virtual. Esta es una abstraccion creada por el S.O para poder manipular a la misma. Ya sabemos que los espacios se reservan en base al tipo de informacion, y para el programador solamente es la declaracion de elementos y su uso. Por lo tanto, cada vez que trabajamos con stack o heap, en realidad estamos trabajando con la version de la memoria virtual.
Cuando hablamos de los punteros y referencias, mencionamos muy superficialmente que la memoria posee varias secciones. Con lo cual podemos decir que existe una jerarquia entre las distintas secciones. Y la llamamos jerarquia porque las secciones mas bajas tendran un acceso mas rapido pero con espacio chico. En cambio, las superiores tendran mayor espacio pero un acceso mas lento. Veamos como es la jerarquia:

La velocidad se incrementara en base a la distancia con el CPU. Los registros al estar en este seran siempre los mas rapidos, asi como la memoria cache sera mas rapida que la memoria principal o memoria. El disco rigido no solo por ser mecanico sino tambien porque es el elemento mas alejado del CPU. Les dejo una serie de links donde hablamos mas detalladamente de cada uno de ellas:
- Registros
- Memoria Cache
- Memoria principal
- Almacenamiento Permanente
Nota:
A medida que suba los posts, los ire vinculando con la lista anterior.
En resumen, hoy hemos visto superficialmente a la memoria, que es, como se compone, asi como tambien algunos ejemplos para entender un poco mas su concepto, pero en los proximos posts iremos viendo cada una de las distintos tipos de memoria. Espero les haya resultado de utilidad 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.


Donatión
It’s for site maintenance, thanks!
$1.50
