Anuncios

Bienvenidos sean a este post, hoy veremos otra forma de memoria.

Anuncios

Hasta ahora hemos tenido todo nuestro contenido para subir memoria de una forma «controlada» pero esto no sera siempre asi, dado que no siempre podemos direccionar correctamente la memoria mediante la forma automatica o estatica, tal como vimos en los posts anteriores, esto es asi porque los objetos pueden variar en el momento de ejecucion de nuestro programa, este y otros problemas pueden estar relacionados con:

  • Algoritmos de orden
  • Busqueda eficiente
  • Busqueda de grandes cantidades de datos
  • Tecnicas de optimizacion de teorias graficas y geometricas
Anuncios

Si bien todos estos son topicos de programacion avanzada, el uso de memoria dinamica nos permite poder trabajar con ellos, pero repasemos como ubica C los elementos en memoria.

Anuncios

Si bien en algunos posts anteriores hemos hablado sobre esto veamos el siguiente diagrama para resumirlo de una mejor manera:

Anuncios

Si bien esta es una imagen muy simplificada sobre como trabajamos con la memoria es lo mas exacto, el sistema operativvo provee al lenguaje sus respectivo espacio en memoria, el cual a su vez esta divido en varios segmentos para sus determinados usos, veamos en detalle cada uno de ellos.

Anuncios

Memoria del sistema

En esta contendra no solo la memoria del sistema sino tambien de los programas del sistema, asi como tambien las direcciones de los dispositivos del ordenador, este segmento es para el mapeo de todos los programas que esten corriendo haciendo que haya solo una copia del codigo del sistema en todo este bloque, este bloque es administrado exclusivamente por el sistema.

Anuncios

Codigo del programa

Aqui es donde el programa compilado es cargado y ejecutado

Anuncios

Memoria global y estatica

Despues que se cargo el programa las variables globales y estaticas son ubicadas e iniciadas en este segmento.

Anuncios

Stack

Cuando un llamado a una funcion es realizado sus parametros (es decir cualquiera de las variables automaticas declaradas en ella) y el valor que devuelve son ingresado en este segmento llamado stack, este se va cargando desde la parte mas alta de la memoria a la parte mas baja para luego pasar al segmento llamado heap, todo esto mientras una funcion llama a otra funcion y asi sucesivamente, ahora cuando una funcion devuelve un valor hace que sea removido del stack.

Anuncios

Heap

Cuando el programa ubica la memoria dinamica lo hace en este segmento, haciendo que se llene de forma inversa al anterior, es decir desde la memoria mas baja a la superior, la forma de ubicar en este segmento es mayoritariamente al azar y ajustandose al mejor esquema de ubicacion, en lo posible se ubican en los espacio de memoria mas bajos, una vez que se removio nos permite reubicar otros datos del mismo o menor tamaño.

Anuncios
Anuncios

Con esto podemos resumir que cada programa vive en su propio espacio de memoria, el espacio de sistema es comun para todos, una vez ubicado el codigo compilado y las variables globales y/o estaticas en memoria recien el sistema procede a ejecutar el main, cuando llamamos a una funcion este salta a la direccion de memoria de la misma, mandando todas sus parametros, variables automaticas y valores de retorno al stack, cuando la funcion finaliza la remueve fuera de stack y devuelve la ejecucion a la ubicacion del espacio del programa desde donde fue llamado, en cambio las dinamicas se realizaran en el heap pero en el proximo post veremos como se hace todo esto.

Anuncios

En resumen, hoy hemos visto de forma mas resumida como trabaja el programa en memoria, un simple esquema donde podemos ver todo lo que haciamos anteriormente con nuestros programas pero no sabiamos que sucedia, tambien hemos visto muy superficialmente la memoria dinamica, espero les haya sido 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.

Anuncios
pp258

Donación

Es para mantenimento del sitio, gracias!

$1.50