Está en la página 1de 13

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

Las tcnicas de asignacin de memoria esttica son sencillas. A partir de una posicin sealada por un puntero de referencia se aloja el objeto X, y se avanza el puntero tantos bytes como sean necesarios para almacenar el objeto X. La asignacin de memoria puede hacerse en tiempo de compilacin y los objetos estn vigentes desde que comienza la ejecucin del programa hasta que termina.

La asignacin de memoria puede hacerse en tiempo de compilacin y los objetos estn vigentes desde que comienza la ejecucin del programa hasta que termina. En los lenguajes que permiten la existencia de subprogramas, y siempre que todos los objetos de estos subprogramas puedan almacenarse estticamente se aloja en la memoria esttica un registro de activacin correspondiente a cada uno de los subprogramas. Estos registros de activacin contendrn las variables locales, parmetros formales y valor devuelto por la funcin.

Dado que las variables estn permanentemente en memoria es fcil implementar la propiedad de que conserven o no su contenido para cada nueva llamada

Qu es la memoria dinmica? Si un 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 el nmero indeterminado'', sera declarar una constante MAX_LINEAS, darle un valor muy grande, y declarar un array de tamao MAX_LINEAS. Esto, 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 del PC).

Memoria Dinmica. La memoria dinmica sirve para que los programas se adapten siempre al tamao del problema que tienen que resolver, sin desperdiciar recursos de memoria. Esto se traduce asimismo en una mayor eficiencia en la ejecucin de los programas. La memoria dinmica es un espacio de almacenamiento que se puede solicitar en tiempo de ejecucin. Adems de solicitar espacios de almacenamiento, tambin podemos liberarlos (en tiempo de ejecucin) cuando dejemos de necesitarlos.

Existen funciones para: Reserva de memoria. Liberacin de memoria. Realojamiento de memoria

Realojamiento de memoria

En determinadas ocasiones, sobre todo cuando se utilizan estructuras de datos dinmicas, es necesario ajustar el tamao de una zona de memoria (ya sea para hacerla ms grande o ms pequea). recibe un puntero a memoria que apunta a una regin que es la que ser acomodada al nuevo tamao y devuelve el puntero a la nueva zona de memoria.

Asignacin dinmica El proceso de compactacin del punto anterior es una instancia particular del problema de asignacin de memoria dinmica, el cual es el cmo satisfacer una necesidad de tamao n con una lista de huecos libres. Existen muchas soluciones para el problema. El conjunto de huecos es analizado para determinar cul hueco es el ms indicado para asignarse. Las estrategias ms comunes para asignar algn hueco de la tabla son:

Primer ajuste: Consiste en asignar el primer hueco con capacidad suficiente. La bsqueda puede iniciar ya sea al inicio o al final del conjunto de huecos o en donde termin la ltima bsqueda. La bsqueda termina al encontrar un hueco lo suficientemente grande.

Mejor ajuste: Busca asignar el espacio ms pequeo de los espacios con capacidad suficiente. La bsqueda se debe de realizar en toda la tabla, a menos que la tabla est ordenada por tamao. Esta estrategia produce el menor desperdicio de memoria posible.

Peor ajuste: Asigna el hueco ms grande. Una vez ms, se debe de buscar en toda la tabla de huecos a menos que est organizada por tamao. Esta estrategia produce los huecos de sobra ms grandes, los cuales pudieran ser de ms uso si llegan procesos de tamao mediano que quepan en ellos. Se ha demostrado mediante simulacros que tanto el primer y el mejor ajuste son mejores que el peor ajuste en cuanto a minimizar tanto el tiempo del almacenamiento. Ni el primer o el mejor ajuste es claramente el mejor en trminos de uso de espacio, pero por lo general el primer ajuste es ms rpido.