Académique Documents
Professionnel Documents
Culture Documents
MANEJO DE MEMORIA
Manejo de memoria
Todas las variables, arreglos y objetos en general tienen una duracin
determinada durante el transcurso de un programa, esto quiere decir que son
creados y destruidos de acuerdo a la ejecucin del programa.
Existen 3 formas de utilizar la memoria para almacenar valores.
1.-Memoria Esttica
Se utiliza para las variables globales y las declaradas como estticas, tales objetos
tienen asignada la misma direccin de memoria desde el comienzo hasta el final
del programa.
* variables globales
* variables static
2.-Memoria Automtica
Es la utilizada por los argumentos y las variables locales en una funcin o
procedimiento, cada ejecucin de este crea tales objetos y son destruidos al salir
de ellos.
* argumentos
* variables locales
3.-Memoria Dinmica
Es tambin llamado almacenamiento libre y en estos caso el programador solicita
memoria para almacenar un objeto y es el responsable de liberar tal memoria para
que pueda ser reutilizada por otros objetos.
Qu es la memoria dinmica?
Supongamos que nuestro programa debe manipular estructuras de datos de
longitud desconocida. Un ejemplo simple podra ser el de un programa que lee las
lneas de un archivo y las ordena. Por tanto, deberemos leer un nmero
indeterminado de lneas, y tras leer la ltima, ordenarlas. Una manera de manejar
ese ``nmero indeterminado'', sera declarar una constante MAX_LINEAS, darle
un valor vergonzosamente grande, y declarar un array de tamao MAX_LINEAS.
Esto, obviamente, es muy ineficiente (y feo). Nuestro programa no slo quedara
limitado por ese valor mximo, sino que adems gastara esa enorme cantidad de
memoria para procesar hasta el ms pequeo de los ficheros.
La solucin consiste en utilizar memoria dinmica. La memoria dinmica es un
espacio de almacenamiento que se solicita en tiempo de ejecucin. De esa
manera, a medida que el proceso va necesitando espacio para ms lneas, va
solicitando ms memoria al sistema operativo para guardarlas. El medio para
manejar la memoria que otorga el sistema operativo, es el puntero, puesto que no
podemos saber en tiempo de compilacin dnde nos dar huecos el sistema
operativo (en la memoria de nuestro PC).
Memoria dinmica:
La reserva de memoria dinmica se hace en tiempo de ejecucin despus de leer
los datos y de conocer el tamao exacto del problema. Como consecuencia se
adapta mucho mejor a las necesidades en cada caso.
El sitio donde se almacenan los objetos se denominan en ingles heap o free store
traducido como montculo o memoria libre, y el sitio preciso donde se encuentre
depende del compilador y el tipo de puntero utilizado. La creacin y destruccin de
los objetos est en manos del programador a travs de los operadores new y
delete.
Supongamos que nuestro programa debe manipular estructuras de datos de
longitud desconocida. Un ejemplo simple podra ser el de un programa que lee las
lneas de un archivo y las ordena. Por tanto, deberemos leer un nmero
indeterminado de lneas, y tras leer la ltima, ordenarlas. Una manera de manejar
ese nmero indeterminado, sera declarar una constante MAX_LINEAS, darle un
valor vergonzosamente grande, y declarar un arreglo de tamao MAX_LINEAS.
Esto, obviamente, es muy ineficiente. Nuestro programa no slo quedara limitado
por ese valor mximo, sino que adems gastara esa enorme cantidad de memoria
para procesar hasta el ms pequeo de los ficheros.
La solucin consiste en utilizar memoria dinmica. La memoria dinmica es un
espacio de almacenamiento que se solicita en tiempo de ejecucin. De esa
manera, a medida que el proceso va necesitando espacio para ms lneas, va
solicitando ms memoria al sistema operativo para guardarlas. El medio para
manejar la memoria que otorga el sistema operativo, es el puntero, puesto que no
podemos saber en tiempo de compilacin dnde nos dar huecos el sistema
operativo (en la memoria de nuestro PC).
MEMORIA DINMICA
Los objetos son creados
explcitamente mediante el
operador new.
MEMORIA DINMICA
Los objetos son destruidos
explcitamente por el operador
delete.
ndice de arreglos:
MEMORIA ESTTICA
Al reservar memoria esttica
para un arreglo el valor del
ndice debe ser un valor
constante.
MEMORIA DINMICA
El indice de un arreglo puede
ser un valor variable de modo
que la cantidad de memoria
reservada por una linea de
cdigo puede variar en tiempo
de ejecucin.
Ejemplo:
int A [20];
El valor de un arreglo puede ser un valor de una variable, de modo que la cantidad
de memoria reservado puede variar en tiempo de ejecucin.
Ejemplo:
int A = new int[variable];