Compiladors II - 25002
Juny 2004

  1. ¿Qué código intermedio se puede reordenar facilmente?
     Arbol sintáctico abstracto
     Postorden
     Tripletas indirectas
       Tripletas directas
       Ninguna de las anteriores
       No contesto...
 
  2. La optimización global extiende la aplicación de las siguientes optimizaciones fuera del bloque básico
     Folding, propagación de constantes y eliminación de subexpresiones redundantes
     Propagación de constantes y eliminación de subexpresiones redundantes
     Folding y eliminación de subexpresiones redundantes
       Folding y propagación de constantes
       Ninguna de las anteriores
       No contesto...
 
  3. El folding realiza la siguiente transformación
     a+a -> a<<1
     a+0 -> a
     a*1 -> a
       Todas las anteriores
       Ninguna de las anteriores
       No contesto...
 
  4. La reducción de potencia realiza la siguiente transformación
     3*4 -> 12
     1-10 -> -9
     a=4; b=a+2; -> a=4; b=4+2;
       a) y b)
       Ninguna de las anteriores
       No contesto...
 
  5. ¿Qué característica de los bloques básicos se aprovecha en la optimización local?
     Un bloque básico suele estar formado por pocas instrucciones
     El orden de ejecución de las instrucciones es fijo y conocido en tiempo de compilación.
     Los saltos solo se pueden encontrar al final del bloque básico
       Las etiquetas sólo se pueden encontrar al inicio del bloque básico
       Ninguna de las anteriores.
       No contesto...
 
  6. ¿Qué ventaja ofrece el código intermedio representado con tripletas indirectas?
     Unas instrucciones no dependen de las otras
     Las dependencias entre instrucciones se expresan explícitamente
     El código se puede reordenador fácilmente
       b) y c)
       Ninguna de las anteriores
       No contesto...
 
  7. La reducción de potencia es
     Un método de optimización local
     Un método de optimización de bucles
     a) y b)
       Un método de optimización global
       Ninguna de las anteriores
       No contesto...
 
  8. En el caso que un compilador no aplique optimización de folding.¿Cómo tendrá que cambiar los hábitos del programador que quiere realizar programas rápidos?
     Tendrá que sustituir por constantes las apariciones de variables a las que asigna una constante.
     Tendrá que sustituir por variables las subexpresiones que se repitan
     Tendrá que sustituir los cálculos entre constantes por el resultado del cálculo
       Tendrá que agrupar las constantes al principio de cada expresión
       Ninguna de las anteriores.
       No contesto...
 
  9. La optimización global se puede utilizar para ...
     Eliminar código que nunca se ejecutará
     Detectar el uso de variables locales no inicializadas
     Detectar asignaciones innecesarias
       Todas las anteriores
       Ninguna de las anteriores
       No contesto...
 
  10. ¿Cuál es la diferencia básica entre un goto no local y un try and catch?
     En un goto se conoce la dirección a saltar en tiempo de compilación
     En un goto se puede utilizar para salir de una función
     Un goto no se puede saltar fuera de una función
       Un goto no se puede utilizar para tratar errores
       Ninguna de las anteriores
       No contesto...
 
  11. En un goto válido
     El código de origen utiliza menos espacio de pila que el código destino
     El código de origen utiliza más espacio de pila que el código destino
     El código de origen utiliza el mismo espacio de pila que el código destino
       b) y c)
       Ninguna de las anteriores
       No contesto...
 
  12. ¿Cómo se puede implementar la gestión de excepciones sin que se les tenga que aplicar ni un ciclo de reloj si no se producen?
     Utilizando una tabla donde se indican los intervalos de código que corresponden a cada estructura try and catch
     Utilizacndo el goto no local
     Guardando la información de los controladores activos en una pila
       Modificando los vectores de interrupción del sistema operativo.
       Modificando los vectores de interrupción del sistema operativo.
       No contesto...
 
  13. Un catch cuyo parámetro sea una clase A captura las excepciones
     de los objetos de la clase A
     de objectos de la clase A y de clases derivadas a A
     de objetos de la clase A y de clases base de A
       de objetos de clase A y las clases heredadas por A
       Ninguna de las anteriores
       No contesto...
 
  14. ¿Cómo se puede optimizar un switch?
     Crear una tabla ordenada con valores de los casos y direcciones de código. Generarl el código que realiza una búsqueda binaria de la tabla y salta al encontrar el valor que busca
     Si el intervalo de los valores de los casos es pequeño, crear una tabla de saltos indexada por el valor de la expresión del switch
     Generarl un código que compara con cada valor de los casos
       a) y b)
       No contesto...
 
  15. Cuál de las siguientes afirmaciones es cierta
     El método de gestión de memoria por contadores de referencia no perimite estructuras de datos cíclicas
     El mark & sweep (marcar y barrer) tiene una complejidad lineal respecto a los nodos utilizados por el programa
     La compactación facilita el proceso de liberación de memoria
       El garbage collection por copia es más lento que los otros métodos de gestión de memoria dinámica
       Ninguna de las anteriores
       No contesto...
 
  16. ¿Cuál es la información mínima que ha de conocer la gestión de memoria implícita de cada bloque de memoria?
     Dirección inicial, tamaño y contenido
     Dirección inicial, tamaño y nº de celdas
     Dirección inicial, tamaño y apuntadores que contiene el bloque de memoria
       Dirección inicial, tamaño y el tipo de bloque de memoria
       Ninguna de las anteriores
       No contesto...
 
  17. El recolector de memoria por copia
     Utiliza la mitad de la memoria
     Compacta la memoria
     Su complejidad es lineal respecto a al espacio de memoria en uso por el programa
       Todas las anteriores
       Ninguna de las anteriores
       No contesto...
 
  18. ¿Cómo afecta la recolección de memoria a la programación orientada a objetos?
     El programador desconoce en que momento se destruirán los objetos.
     El programador no ha de implementar los destructores de los objetos
     Los objetos siempre se encontrarán el el heap (tal como pasa en JAVA)
       Todas las anteriores
       Ninguna de las anteriores
       No contesto...
 
  19. ¿Qué ventaja ofrece la gestión de memoria implícita respecto la explícita
     desarrollo más rápido
     velocidad
     optimiza el uso de la memoria
       reduce los fallos de página
       ninguna de las anteriores
       No contesto...
 
  20. La gestión mediante bloques etiquetados en los extremos
     realiza búsquedas al pedir memoria
     realiza búsquedas al liberar memoria
     no realiza búsquedas
       a) y b)
       Ninguna de las anteriores
       No contesto...
 
  21. ¿Cómo se implementan las funciones virtuales?
     Mediante una tabla de funciones virtuales a la que apuntan todos los objetos de la misma clase
     Mediante una tabla de funciones virtuales para cada objeto
     Cada objeto tiene un único apuntador a su tabla de funciones virtuales
       El código de llama a una función virtual es el mismo que se utliza para los métodos no virtuales de una clase
       Ninguna de las anteriores
       No contesto...
 
  22. ¿Cuántas direcciones de memoria se utilizaran para referenciar los objetos de una clase derivada de 3 clases base?
     1
     2
     3
       4
       Ninguna de las anteriores
       No contesto...
 
  23. ¿Cuándo puede ser necesario restar un desplazamiento a la dirección de un objeto?
     Al llamar a un método no virtual
     Al llamar a un método virtual (función virtual)
     Al llamar a un método virtual o no virtual
       Todas las anteriores
       Ninguna de las anteriores
       No contesto...
 
  24. Cuando se genera el código de un template
     Al instanciarlo con uno o más tipos de datos
     Al definirlo
     Al declararlo
       Todas las anteriores
       Ninguna de las anteriores
       No contesto...
 
  25. PROGRAMACIÓN FUNCIONAL
¿Cómo se puede acceder a las variables de una función después de haber acabado su ejecución?
     No es posible.
     Mediante una cláusula de una función definida en su ámbito local.
     Mediante un constructor.
       Llamando de nuevo a la función.
       Ninguna de las anteriores.
       No contesto...
 
  26. La optimización de la recursividad en cola...
     Evita el crecimiento excesivo de la pila de argumentos.
     Evita el crecimiento excesivo de la pila de contexto.
     Elimina los argumentos de la pila.
       Elimina el uso del display.
       Ningunad e las anteriores.
       No contesto...
 
  27. El ámbito de una función se puede encontrar
     En la pila de contexto
     En la pila de argumentos
     En el heap
       a) y c)
       Ninguna de las anteriores
       No contesto...
 
  28. PROGRAMACIÓN LÓGICA
¿Para qué sirve un bloque de elección (choice point)?
     Guarda el estado de las pilas en una bifurcación no determinista.
     Protege contra el borrado a los ámbitos.
     Es la base para la implementación del backtracking.
       Todas las anteriores.
       Ninguna de las anteriores.
       No contesto...
 
  29. ¿Qué ventaja aporta implementar el desconocido con apuntadores cíclicos?
     El desconocido se puede tratar como cualquier otro tipo de datos cuando se copia.
     Se reduce el número de tipos de datos que ha de manejar la máquina de Warren.
     El desconocido no se representa con apuntadores cíclicos.
       El apuntador cíclico se protege a si mismo de la recolección de memoria.
       Ninguna de las anteriores.
       No contesto...
 
  30. En la unificación puede ser necesario
     Instancia variables (desconocidos).
     Construir estructuras en el heap.
     Comparar estructuras.
       Todas las anteriores.
       Ninguna de las anteriores.
       No contesto...
 

Check...