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 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
Publicar un comentario