Compilador
Enviado por • 3 de Octubre de 2013 • 664 Palabras (3 Páginas) • 194 Visitas
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.
...