Memoria Estática y Memoria Dinámica.
Para descargar el archivo Word, haz clic AQUÍ.
MEMORIA
ESTÁTICA.
Datos
estáticos: su tamaño y
forma es constante durante la ejecución de un programa y por tanto se
determinan en tiempo de compilación. El ejemplo típico son los arrays. Tienen
el problema de que hay que dimensionar la estructura de antemano, lo que puede
conllevar desperdicio o falta de memoria.
La gestión de la memoria estática es la más sencilla. De hecho, algunos lenguajes de programación antiguos, como las primeras versiones de FORTRAN, ´únicamente tienen reserva estática de memoria. Las principales ventajas son la sencillez de implementación y que los requerimientos de memoria del programa son conocidos una vez compilado el mismo. Sin embargo, existen bastantes inconvenientes:
- El tamaño de los objetos debe ser conocido en tiempo de compilación: no se puede trabajar con objetos de longitud variable.
- Es difícil para el programador definir el tamaño de las estructuras que va a usar: si son demasiado grandes, desperdiciara memoria; si son pequeñas, no podrá utilizar el programa en todos los casos.
- Sólo puede haber una instancia de cada objeto: no se pueden implementar procedimientos recursivos.
Por estas razones, casi todos
los lenguajes de programación tienen además la posibilidad de gestionar parte
de la memoria de manera dinámica. La gestión de esta memoria se puede hacer íntegramente
en tiempo de compilación. Para acceder a un objeto, el programa ´únicamente
necesita saber en qué dirección se encuentra. Estas direcciones se pueden
asignar secuencialmente. Basta con que el compilador tenga anotada la primera dirección
libre del bloque de memoria estática y la vaya actualizando sumando la talla de
los objetos que va reservando.
MEMORIA
DINÁMICA.
Datos
dinámicos: su tamaño y
forma es variable (o puede serlo) a lo largo de un programa, por lo que se
crean y destruyen en tiempo de ejecución. Esto permite dimensionar la
estructura de datos de una forma precisa: se va asignando memoria en tiempo de ejecución
según se va necesitando.
Cuando
el sistema operativo carga un programa para ejecutarlo y lo convierte en
proceso, le asigna cuatro partes lógicas en memoria principal: texto, datos (estáticos),
pila y una zona libre. Esta zona libre (o heap) es la que va a contener los
datos dinámicos, la cual, a su vez, en cada instante de la ejecución tendrá
partes asignadas a los mismos y partes libres que fragmentarán esta zona,
siendo posible que se agote si no se liberan las partes utilizadas ya
inservibles. (La pila también varía su tamaño dinámicamente, pero la gestiona
el sistema operativo, no el programador): Para trabajar con datos dinámicos
necesitamos dos cosas:
1. Subprogramas predefinidos en el lenguaje
que nos permitan gestionar la memoria de forma dinámica (asignación y liberación).
2. Algún tipo de dato con el que podamos
acceder a esos datos dinámicos (ya que con los tipos vistos hasta ahora solo
podemos acceder a datos con un tamaño y forma ya determinados).

Comentarios
Publicar un comentario