Compiladors II - 25002
Junio 2003
1. OPTIMIZACIÓN DE CÓDIGO
¿Qué código intermedio se puede reordenar fácilmente?
Arbol sintáctico abstracto
Postorden
Tripletas indirectas
Tripletas directas
Ninguna de las anteriores
No contesto...
2. ¿Qué características tiene el código intermedio de árbol sintáctico abstracto?
Complica la división en bloques básicos
Facilita la optimización de expresiones
Es próximo al código fuente
Todas las anteriores
Ninguna de las anteriores
No contesto...
3. Un bloque básico puede contener...
Cualquier instrucción que no sea de control de flujo
Cualquier instrucción que no sea de control de flujo y un salto al principio
Cualquier instrucción que no sea de control de flujo y un salto al final
Cualquier instrucción que no sea de control de flujo y un salto intermedio
Ninguna de las anteriores
No contesto...
4. ¿Que otras optimizaciones se benefician de la aplicación del loop unrolling?
La reducción de frecuencia
La propagación de constantes
El folding
b i c
Ninguna de las anteriores
No contesto...
5. La optimización global puede utilizarse para...
Generar warnings sobre el uso de variables globales
Generar warnings sobre el uso de atributos de una clase
Eliminar código no utilizado por el programa
Reducir el número de variables globales
Ninguna de las anteriores
No contesto...
6. 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...
7. ¿Para qué es apropiado un código en postorden?
Optimización de expresiones
Optimización de bucles
Optimización global
Interpretación
Ninguna de las anteriores
No contesto...
8. ¿Qué paso de la optimización de código transforma la expresión C=A*B+A*B en TMP=A*B; C=TMP+TMP ?
La propagación de constantes
La eliminación de subexpresiones redundantes (comunes)
El folding
La reducción de potencia
Ninguna de las anteriores
No contesto...
9. ¿Qué información necesita la reducción de frecuencia sobre una función para que pueda sacar su llamada de dentro de un bucle?
El número de parámetros de la función
La función no modifica variables globales ni realiza entradas/salidas
El único efecto que tiene la ejecución de la función es el cálculo del valor de retorno que sólo depende de los valores de los parámetros de la función
La función no modifica ninguna variable global o local
Ninguna de las anteriores
No contesto...
10. ESTRUCTURAS COMPLEJAS
¿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
Un goto se puede utilizar para salir de una función
Un goto no puede saltar fuera de una función
Un goto no se puede utilizar para tratar errores
Ninguna de las anteriores
No contesto...
11. ¿Cuándo se puede implementar un throw como un goto?
Siempre
Nunca
Sólo si el throw se encuentra fuera de una estructura try and catch
Sólo si el throw se encuentra dentro de una estructura try and catch
Ninguna de las anteriores
No contesto...
12. ¿Cómo se implementan los controladores de excepciones (try catch)?
Con una llamada a subrutina
Utilizando el goto no local
Guardando la información de los controladores activos en una pila
Modificando los vectores de interrupción del sistema operativo
Ninguna de las anteriores
No contesto...
13. Un GOTO puede utilizarse para
Salir de una función
Entrar en una función
Saltar de cualquier parte del código fuente a cualquier otra
Entrar en un procedimiento
Ninguna de las anteriores
No contesto...
14. El código generado por la instrucción GOTO puede contener
un salto incondicional
eliminación de bloques de activación de funciones
eliminación de bloques de activación de excepciones
Todas las anteriores
Ninguna de las anteriores
No contesto...
15. ¿Se puede implementar el try catch sin que gaste tiempo de ejecución si no se producen excepciones?
Sí, utilizando una tabla de intervalos de código que corresponden a cada estructura try and catch
Sí, utilizando el
goto
no local.
Sí, guardando la información de los controladores activos en una pila
No.
Ninguna de las anteriores
No contesto...
16. GESTIÓN DE MEMORIA DINÁMICA (HEAP)
¿Cómo afecta la gestión dinámica implícita a la programación orientada a objeto?
Casi elimina la necesidad de constructores y destructores.
Casi elimina la necesidad de constructores.
Casi elimina la necesidad de destructores.
Su efecto es el mismo que para cualquier otra técnica de programación.
Ninguna de las anteriores.
No contesto...
17. ¿Qué puede pasar cuando un gestor por contador de referencias libera un bloque de memoria?
Se libera el bloque y nada más.
Se puede producir una liberación en cascada de otros bloques.
Puede ser necesario actualizar otros contadores.
b) y c)
Ninguna de las anteriores.
No contesto...
18. ¿Cuál es el principal problema que añade la gestión de memoria implícita respecto la explícita?
Tener que tratar todos los apuntadores del programa.
Marcar cada bloque de memoria como libre u ocupado.
Realizar búsquedas de bloques libres.
La fragmentación de la memoria.
Ninguna de las anteriores.
No contesto...
19. El gestor de memoria basado en una lista ordenada de bloques libres...
Realiza búsquedas en las operaciones de demanda y liberación de memoria.
Realiza búsquedas en las operaciones de demanda.
Realiza búsquedas en las operaciones de liberación de memoria.
Realiza búsquedas cuando ha de subdividir los bloques de memoria.
Ninguna de las anteriores.
No contesto...
20. La compactación se puede aplicar en
La gestión de memoria explícita.
La gestión de memoria implícita.
La gestión de memoria implítica y explícita.
La gestión de memoria mediante bloques compañeros.
Ninguna de las anteriores.
No contesto...
21. ¿Cuál de las siguientes afirmaciones es cierta?
El método de gestión de memoria por contadores de referencia no permite estructuras de datos cíclicas.
El mark and sweep (marcar y barrer) tiene complejidad lineal respecto el número de nodos que el programa realmente utiliza.
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...
22. El recolector de memoria por copia
Utiliza la mitad de la memoria.
Compacta la memoria.
Su complejidad es lineal respecto al espacio de memoria en uso por el programa.
Todas las anteriores.
Ninguna de las anteriores.
No contesto...
23. ¿Cuál es la diferencia entre gestión de memoria dinámica implícita y explícita?
En la gestión de memoria dinámica explícita se especifica el tamaño de los bloques a reservar.
La gestión de memoria dinámica implícita libera la memoria automáticamente.
La gestión de memoria implícita busca el espacio libre solo cuando no queda más memoria.
La gestión de memoria explícita facilita la compactación de la memoria ocupada.
Ninguna de las anteriores.
No contesto...
24. PROGRAMACIÓN ORIENTADA A OBJETO
¿Cuántas direcciones de memoria se utilizan para referenciar un objeto?
Una dirección.
Varias direcciones según la profundidad del árbol de herencia.
Una dirección si sólo hay herencia simple.
Una dirección si hay herencia múltiple.
Ninguna de las anteriores.
No contesto...
25. ¿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 llamada a una función virtual es el mismo que se utiliza para los métodos no virtuales de una clase.
Ninguna de las anteriores.
No contesto...
26. En el caso de una llamada a una función virtual puede ser necesario
Sumar un desplazamiento a la dirección del objeto antes de llamar.
Restar un desplazamiento después de la llamada, pero antes de entrar en el código de la función virtual.
a) y b)
Restar un desplazamiento a la dirección del objeto antes de llamar.
Ninguna de las anteriores.
No contesto...
27. PROGRAMACIÓN FUNCIONAL
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.
Ninguna de las anteriores.
No contesto...
28. ¿Qué ha de contener una clausura?
La dirección de entrada de la función y el display.
La dirección de entrada de la función y la base del ámbito de la función donde se ha definido la clausura (función).
a) y b)
La dirección de entrada de la función.
Ninguna de las anteriores.
No contesto...
29. 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...
30. ¿Cómo se representa el desconocido?
Mediante un apuntador cíclico.
Mediante un átomo.
Mediante un functor o estructura.
Mediante un valor constante.
Ninguna de las anteriores.
No contesto...
Check...