ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Compilador


Enviado por   •  3 de Octubre de 2013  •  664 Palabras (3 Páginas)  •  179 Visitas

Página 1 de 3

e estar almacenado en memoria principal. El compilador reserva

en la sección de código una zona contigua de memoria para cada conjunto de overlays.

El tamaño de esta zona debe ser igual al del mayor módulo que se cargue sobre ella. Es

función del programador determinar cuantas zonas de overlay se definen, qué funciones

y procedimientos se encapsulan en cada módulo de overlay, y cómo se organizan estos

módulos para ocupar cada una de las zonas de overlay. Una restricción a tener en cuenta

es que las funciones de un módulo no deben hacer referencia a funciones de otro

módulo del mismo overlay, ya que nunca estarán simultáneamente en memoria.

Evidentemente, el tiempo de ejecución de un programa estructurado con

overlays es mayor que si no tuviese overlays y todo el código estuviese residente en

memoria, puesto que durante la ejecución del programa es necesario cargar cada módulo

cuando se realiza una llamada a alguna de las funciones que incluye. También es tarea

del programador diseñar la estructura de overlays de manera que se minimice el número

de estas operaciones. La técnica de overlays no sólo se utiliza cuando el programa a

compilar es muy grande en relación con la disponibilidad de memoria del sistema, sino

también cuando se desea obtener programas de menor tamaño que deben coexistir con

otros del sistema operativo cuando la memoria es escasa.

9.3 Zona de datos

Los datos que maneja un programa se dividen actualmente en tres grandes

bloques:

• Uno dedicado a almacenar las variables globales accesibles por cualquier línea

de código del programa. Este bloque es la Zona de Datos de Tamaño Fijo.

• Otro dedicado a almacenar las variables locales a cada función y

procedimiento. Éstas no pueden almacenarse en el bloque anteriorpor dos

motivos principales: a) no es necesario almacenar las variables de una función

hasta el momento en que ésta es invocada y, una vez que finaliza su ejecución,

tampoco; y b) durante la ejecución de una función recursiva deben

almacenarse varias instancias de sus variables locales, concretamente tantas

como invocaciones a esa misma función se hayan producido. Este bloque es

la Pila.

• Un último bloque dedicado a almacenar los bloques de memoria gestionados

directamente por el usuario mediante sentencias malloc/free, new/dispose,

etc. La cantidad de memoria requerida para estos menesteres varia de

ejecución en ejecución del programa, y los datos ubicados no son locales a

Gestión de la memoria en tiempo de ejecución

284

Figura 9.3 Asignación de un bloque de memoria para una variable global X

ninguna función, sino que perduran hasta que son liberados. Este bloque es

el Montón.

9.3.1 Zona de Datos de Tamaño Fijo

La forma más fácil de almacenar el contenido de una variable en memoria en

tiempo de ejecución es en memoria estática o permanente a lo largo de toda la ejecución

del programa. No todos los objetos (variables) pueden ser almacenados estáticamente.

Para que un objeto pueda ser almacenado en memoria estática, su tamaño ( número de

bytes necesarios para su almacenamiento) ha de ser conocido en tiempo de compilación.

Como consecuencia de esta condición no podrán almacenarse en memoria estática:

• Los variables locales correspondientes a procedimientos o funciones

recursivas, ya que en tiempo de compilación no se sabe el número de veces

que estas variables que serán necesarias.

• Las estructuras dinámicas de datos tales como listas, árboles, etc. ya que el

número de elementos que la forman no es conocido hasta que el programa se

ejecuta.

Por tanto, las variables locales a una función son datos de tamaño definido,

pero para los que no se sabe el número de ocurrencias del ámbito del que dependen, por

lo que deben almacenarse siguiendo algún criterio dinámico. Tampoco es posible

almacenar en esta zona a las estructuras eminentemente dinámicas, esto es, las que están

gestionadas a través de punteros mediante creación dinámica de espacio libre: listas

dinámicas, grafos dinámicos, etc. Estos datos son de tamaño indefinido por lo que no

es posible guardarlos en la zona de datos de tamaño fijo. Aunque pueda pensarse que

el tamaño del código de una función recursiva también depende del número de veces

que la función se llama a sí misma, esto no es cierto: las instrucciones a ejecutar son

siempre las mismas, y lo que cambia son los datos con los que se trabaja, o sea, las

variables locales.

...

Descargar como  txt (4.4 Kb)  
Leer 2 páginas más »
txt