Compiladors II - 25002
Septiembre 2000
1. OPTIMIZACIÓN DE CÓDIGO
¿Para qué es apropiado un árbol sintáctico abstracto?
Optimización de expresiones
Optimización de bucles
Optimización global
Interpretación
Ninguna de las anteriores
No contesto...
2. ¿Que propiedad de los bloques básicos se aprovecha para la optimización?
En un bloque básico se ejecutan secuencialmente todas las instrucciones o ninguna
Es una unidad indivisible del programa
Los bloques básicos no se repiten
Un bloque básico está formado por instrucciones completas del lenguaje fuente
Ninguna de las anteriores
No contesto...
3. ¿Qué otras optimizaciones se benefician de la aplicación del
loop unrolling
?
La reducción de frecuencia
La propagación de constantes
La eliminación de subexpresiones redundantes
b) y c)
Ninguna de las anteriores
No contesto...
4. ¿Cuál es el código optimizado de
for(i=0;i<3;++i) A[i]=0;
?
A[0]=0; A[1]=0; A[2]=0;
A[0]=0; A[1]=0; A[2]=0; i=3;
El a) pero considerando que las expresiones A[0], A[1] y A[2] son direcciones constantes
A[0]=0; A[1]=0; A[2]=0; i=2;
Ninguna de las anteriores
No contesto...
5. La optimización global puede utilizarse para
Generar warnings sobre el uso de variables locales
Generar warnings sobr el uso de atributos de una clase
Eliminar código no utilizado en el programa
Reducir el número de variables globales
Ninguna de las anteriores
No contesto...
6. ¿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...
7. ¿Qué información es necesaria sobre una función para que la reducción de frecuencia 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...
8. 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...
9. ¿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...
10. ¿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
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...
11. En que se basa la generación de código de la instrucción goto
En el salto incondicional
En el salto condicional
En utilizar la información de la tabla de símbolos para ajustar la pila al ámbito de ejecución de la etiqueta
a) y c)
Ninguna de las anteriores
No contesto...
12. La instrucción break de C como sabe a que dirección de memoria ha de saltar
La instrucción break no ha de considerar el contexto para saber a que dirección ha de saltar
La dirección de salto del break se conoce en el momento de su compilación
break obtiene la dirección a la que ha de saltar de la entrada de la tabla de símbolos que ha dejado la instrucción for while a otra.
break obtiene la dirección a la que ha de saltar de la pila del procesador
Ninguna de las anteriores
No contesto...
13. GESTIÓN DE MEMORIA DINÁMICA (HEAP)
¿Cómo afecta la gestión de memoria 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...
14. ¿Qué puede pasar cuando un (???) contador de referéncias libera un bloque de memoria?
Se libera el bloque y nada más
Se puede producir una (?????)
Puede ser necesario actualizar (???)
b) y c)
Ninguna de las anteriores
No contesto...
15. ¿Cuáles son los principales problemas 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...
16. 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...
17. 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ícita y explícita
La gestión de memoria mediante bloques compañeros
Ninguna de las anteriores
No contesto...
18. ¿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 & sweep (método que marca los nodos utilizados para un segundo paso liberar los que no estén marcados) 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...
19. 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...
20. PROGRAMACIÓN FUNCIONAL
¿Cuál de las siguientes afirmaciones es cierta en un interprete de (???) ?
La aplicación de la función CDR sobre la lista X supone copiar la cola de la lista X
Cuando se asigna un nuevo valor a una variable no se puede acceder a su valor anterior en ningún caso, pero si es posible acceder a las copias de ese valor
Al entorno de una función (???) o símbolos locales (???) sólo se puede acceder desde su código
Todas las anteriores son ciertas
Ninguna de las anteriores
No contesto...
21. La optimización de la (???) 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...
22. 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...
23. ¿Cómo se representa el desconocido?
Mediante un apuntador cíclico
Mediante un átomo
Mediante un functor
Mediante un valor constante
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. ESPECIFICACIÓN DE LENGUAJES DE PROGRAMACIÓN
La semántica interpretativa intenta representar
El comportamiento de los programas de un lenguaje
El cálculo de los atributos
Las restricciones semánticas de un lenguaje
El análisis semántico de un lenguaje
Ninguna de las anteriores
No contesto...
27. En una gramática con atributos se ha de considerar
El recorrido del árbol que realiza el analizador sintáctico
La variación de los valores de los atributos
El contenido de las variables asociadas a los símbolos no terminales
Todas las anteriores
Ninguna de las anteriores
No contesto...
28. ¿Qué significa no poder aplicar ninguna transición de estado en la ejecución de un programa mediante una gramática interpretativa sin estar vacia la secuencia de programa pendiente de ejecutar?
El programa no podrá funcionar en una implementación real
El comportamiento del programa no está definido
La ejecución se parará por error
b) y c)
Ninguna de las anteriores
No contesto...
29. ¿Qué ventajas aporta el uso de gramáticas con atributos?
Son independientes del analizador sintáctico utilizado
Su notación marca dónde se pueden producir errores semánticos
a) y b)
Se implementan fácilmente
Ninguna de las anteriores
No contesto...
Check...