Gestion de Memoria Dinamica


La computadora usa memoria de acceso aleatorio (RAM) para guardar información mientras esta en funcionamiento.  La RAM es volátil, lo que significa que es borrada y reemplazada con nueva información tan pronto como se necesita. La volatilidad también significa que la RAM “recuerda” solamente mientras la computadora está encendida, y pierde su información cuando se apaga la computadora.

Cada computadora tiene una determinada cantidad de RAM instalada. La cantidad de RAM en un sistema se especifica por lo general en Megabytes (Mb) por ejemplo 512 Mb, 1 Gb o mas, en ese orden de ideas se dice un byte es la unidad de medida fundamental de la memoria de una computadora, de los cuales se obtiene los Kilobytes, Megabytes, Gigabytes, siendo estos los más usados. Un kilobytes de memoria equivale a 1,024 bytes.

Para darse una idea de que tantos bytes se necesitan para guardar determinados tipos de datos lo invito a que revise la siguiente tabla de espacios requeridos para guardar datos.


Una página escrita completamente


La RAM en la computadora está organizada en forma secuencial, un byte tras otro. Cada byte de memoria tiene una dirección única mediante la cual es identificada, una dirección que también lo distingue de todos los otros bytes de la memoria. Las direcciones son asignadas a la memoria en orden, comenzando en 0 y aumentando hasta llegar al límite del sistema.

La memoria RAM de la computadora tiene varios usos, pero solamente uno, el almacenamiento de datos, le interesa al programador.

Los datos significan la información con la cual trabaja un programa. Ya sea que el programa esté trabajando con una lista de direcciones, monitoreando la bolsa de valores, manejando un presupuesto o cualquier otra cosa, la información (nombres, precios de acciones, gastos) es guardada en la RAM de la computadora mientras el programa esté ejecutando.

Hasta el momento, la mayoría de los programas los hemos realizado definiendo variables, sin preocuparnos de que se realiza internamente en el computador, muchas veces en forma indiscriminada, es decir sin una verdadera depuración, pero existen ocasiones en que no sabemos cuanta memoria necesitaremos para ejecución de determinado programa, por ejemplo si deseamos realizar un procesador de textos, no sabemos cual va hacer la longitud del texto.

Por eso a veces es necesario poder reservar memoria según se va necesitando. Además de esta forma nuestros programas aprovecharán mejor la memoria del computador en el que se ejecuten, usando sólo los recursos necesarios.

Realmente la utilidad de asignación dinámica de memoria será aplicada en gran medida  en los capítulos relacionados con las estructuras lineales. De acuerdo a lo anterior podemos definir dos tipos de variables: estáticas y dinámicas.


Variables estáticas

Las variables estáticas como recordamos en los inicios de los fundamentos de programación, son aquellas que el programador les asigna memoria antes de la ejecución del programa o de una función, las variables estáticas se llaman  mediante el nombre de la misma, que ha sido declarado por el programador.

Variables dinámicas

Las variables dinámicas deben su nombre al hecho de que pueden ser creadas y destruidas durante el tiempo de ejecución de un módulo.

Para el manejo de variables dinámicas se hace indispensable la utilización de apuntadores, así como de funciones especiales para la asignación y liberación de la memoria correspondiente a dichas variables.

En el lenguaje C existen entre otras las funciones Malloc() y Free() para la asignación y liberación de memoria dinámicamente respectivamente.


Crear y liberar espacios de memoria

Cuando se ejecuta un programa, el sistema operativo reserva una zona de memoria para el código o instrucciones del programa y otra para las variables que se usan durante la ejecución. A menudo estas zonas son la misma zona, es lo que se llama memoria local. También hay otras zonas de memoria, como la pila, que se usa, entre otras cosas, para intercambiar datos entre funciones.

El resto, la memoria que no se usa por ningún programa es lo que se conoce como "heap" o montón.

Cuando nuestro programa use memoria dinámica, normalmente usará memoria del montón, y no se llama así porque sea de peor calidad, sino porque suele haber realmente un montón de memoria de este tipo.





Profundizando un paco en la asignación dinámica, encontramos el operador Ziseof, el cual determina el tamaño en bytes que se requiere en la asignación dinámica de memoria, ya sea por medio de los operadores New y Delete, o por las funciones Malloc y Free, de un arreglo o de cualquier otro tipo de datos,

Comentarios

Entradas populares de este blog

Complejidad Computacional

Algoritmos Recursivos