CARACTERÍSTICAS DE LA MEMORIA ESTÁTICA
CARACTERÍSTICAS DE LA MEMORIA DINÁMICA
•Define la cantidad de memoria necesaria para un programa durante el tiempo de compilación.
•Define el tamaño del espacio de memoria necesario para un programa en tiempo de ejecución.
•El tamaño no puede cambiar durante el tiempo de ejecución del programa.
•El tamaño de los elementos puede cambiar durante la ejecución del programa.
•Almacena todos los elementos definidos con la •Algunos lenguajes de programación utilizan palabra new en un programa. la palabra static para especificar elementos del programa que deben almacenarse en •Las variables dinámicas son aquellas que crecen de memoria estática. tamaño o se reducen durante la ejecución de un programa. •Elementos que residen en memoria •Estas se almacenan en un espacio de memoria estática: llamado heap. –Código del programa • El heap se localiza en la región de memoria que esta encima del stack. –Las variables definidas en la sección principal del programa, las cuales pueden Algunos lenguajes de programación permiten que el solo cambiar su contenido no su tamaño. programador asigne y designe manualmente la –Todas aquellas variables declaradas como memoria. Java utiliza un recolector de basura estáticas en otras clases o módulos. •La memoria dinámica se libera de dos formas: •Estos elementos se almacenan en direcciones fijas que son relocalizadas –Explicita. El programador decide cuando un dependiendo de la dirección en donde el elemento debe ser eliminado de la memoria. El LP cargador las coloque para su ejecución. provee mecanismos para liberación de memoria. •La memoria estática se libera cuando el –Implícita. El sistema decide que elementos deben programa finaliza su ejecución. ser eliminados para recuperar el espacio de memoria que ocupan. El sistema cuenta con un “recolector de •El tamaño de los objetos debe ser basura”. conocido en tiempo de compilación: no se puede trabajar con objetos de longitud •En muchas ocasiones se necesitan estructuras que variable. puedan cambiar de tamaño durante la ejecución del programa. •Es difícil para el programador definir el tamaño de las estructuras que va a usar: si • Es posible disponer de un espacio de memoria son demasiado grandes, desperdiciara arbitrario que dependa de información dinámica memoria; si son pequeñas, no podrá utilizar (disponible sólo en ejecución): Toda esa memoria que el programa en todos los casos. maneja es implementada por el programador cuando fuese necesario. •Solo puede haber una instancia de cada objeto: no se pueden implementar • Es difícil de implementar en el desarrollo de un procedimientos recursivos. programa o aplicación. Es difícil implementar estructuras de datos complejas como son los tipos •El tamaño de las variables se conoce en recursivos (árboles, grafos, etc.).Por ello necesitamos tiempo de compilación, esta información una forma para solicitar y liberar memoria para está incluida en el código objeto generado, nuevas variables que puedan ser necesarias durante por lo cual el proceso es muy eficiente la ejecución de nuestros programas: Heap.