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