Está en la página 1de 4

UNIDAD II

MANEJO DE MEMORIA

2.1. Manejo de memoria esttica


2.2. Manejo de memoria dinmica

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.

2.1. Manejo de memoria esttica

La forma ms fcil de almacenar el contenido de una variable en


memoria en tiempo de ejecucin es en memoria esttica o permanente a
lo largo de toda la ejecucin del programa.
Memoria esttica: Es la memoria que se reserva en el momento de la compilacin
antes de comenzar a ejecutarse el programa. Los objetos mantienen la misma
localizacin en memoria durante todo el transcurso del programa.
Los objetos administrados de este modo son variables globales, variables static de
funciones y miembros static de clases y literales de cualquier tipo.

No todos los objetos (variables) pueden ser almacenados estticamente.


Para que un objeto pueda ser almacenado en memoria esttica su
tamao (nmero de bytes necesarios para su almacenamiento) ha de ser
conocido en tiempo de compilacin, como consecuencia de esta
condicin no podrn almacenarse en memoria esttica:

Los objetos correspondientes a procedimientos o funciones


recursivas, ya que en tiempo de compilacin no se sabe el nmero
de variables que sern necesarias

Las estructuras dinmicas de datos tales como listas, rboles, etc.


ya que el nmero de elementos que las forman no es conocido
hasta que el programa se ejecuta.

El problema con la memoria esttica, es que siempre se reserva antes de conocer


los datos concretos del problema y esto origina reservar siempre un mximo de
memoria que en la mayora de las veces no se va a necesitar.
2.2 Manejo de memoria dinmica

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).

2.3 Ventajas de utilizar memoria dinmica vs memoria esttica


La memoria dinmica sirve para que los programadores se adapten siempre al
tamao del problema que tienen que resolver sin desperdiciar recursos de
memoria y esto se traduce en una mayor eficiencia en la ejecucin de los

programas, las ventajas de utilizar memoria dinmica en comparacin con las


caractersticas de la reserva esttica son:
La creacin de objetos:
MEMORIA ESTTICA
Los objetos locales son
creados al entrar en la funcin
que los declara.
Los objetos globales son
creados al iniciar el programa.

MEMORIA DINMICA
Los objetos son creados
explcitamente mediante el
operador new.

Duracin de los objetos:


MEMORIA ESTTICA
Los objetos locales se
destruyen al salir de la funcin
que los uso.
Los objetos globales se
destruyen al salir del programa.

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];

También podría gustarte