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...