Compiladors II - 25002
Junio 1999
1. OPTIMIZACIÓN DE CÓDIGO
Un bloque básico puede contener:
Asignaciones
Comparaciones
Saltos
Todas las anteriores
Ninguna de las anteriores
No contesto...
2. ¿Qué propiedad de los bloques básicos se aprovecha para la optimización?
En un bloque básico no hay saltos condicionales.
Se ejecutan todas o ninguna instrucción del bloque básico.
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. La reducción de potencia aprovecha...
En el caso de conocer el valor de alguno de los operandos, la operación se puede realizar en tiempo de compilación.
Las multiplicaciones se pueden sustituir por sumas en todos los casos.
En un bucle se pueden sacar las invariantes de bucle para calcularlas menos veces.
En el caso de conocer el valor de alguno de los operandos, la operación se puede sustituir por otra menos costosa.
Ninguna de las anteriores.
No contesto...
4. ¿Qué otras optimizaciones se benefician de la aplicación del loop unrolling?
La reducción de frecuencia.
La propagación de constantes.
El folding.
b) y c)
Ninguna de las anteriores.
No contesto...
5. ¿A qué se puede aplicar la reducción de frecuencia?
A las constantes.
A las variables inductivas.
A las funciones con efectos colaterales.
A las operaciones de entrada/salida.
Ninguna de las anteriores.
No contesto...
6. La reducción de potencia aplicada a bucles sustituye
Divisiones por productos.
Restas por sumas.
Desplazamientos de bits por productos.
Productos de invariantes de bucle por sumas.
Ninguna de las anteriores.
No contesto...
7. ¿Cuándo A+B es igual a A+B en un bloque básico?
Siempre.
Sólo en el caso que no se realicen asignaciones.
Sólo si las variables A y B no se modifican entre los cálculos de las dos expresiones.
Sólo en el caso que pertenezcan a la misma instrucción.
Ninguna de las anteriores.
No contesto...
8. El acceso a arrays mediante apuntadores suele ser más rápido que con la utilización de índices. ¿Qué técnica de optimización puede convertir un acceso por índices a apuntadores con un mayor impacto sobre la velocidad de ejecución?
Propagación de constantes.
Reducción de frecuencia.
Reducción de potencia.
Expansión de bucles (Loop Unrolling).
Ninguna de las anteriores.
No contesto...
9. 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...
10. 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...
11. ESTRUCTURAS COMPLEJAS
¿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 produce?
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...
12. ¿Qué necesita conocer el goto no local para generar código?
La etiqueta a donde ha saltar.
La dirección del código a donde ha de saltar.
Las modificaciones que ha de hacer a la pila, registros del procesador, y la dirección del controlador de excepciones.
Las modificaciones que ha de hacer a la pila y la dirección del controlador de excepciones.
Ninguna de las anteriores.
No contesto...
13. Un GOTO puede utilizarse para...
Entrar en una función.
Saltar de cualquier parte del código fuente a cualquier otra.
Entrar en un procedimiento.
Todas las anteriores.
Ninguna de las anteriores.
No contesto...
14. El código generado por la instrucción GOTO puede contener...
Un salto incondicional.
Creación de bloques de activación de funciones.
Creación de bloques de activación de excepciones.
Todas las anteriores.
Ninguna de las anteriores.
No contesto...
15. Un array guardado en el bloque de activación tiene que cumplir...
Ser de tamaño fijo.
Estar declarado en el ámbito de la función y poder variar su tamaño dentro de la misma llamada.
Estar declarado en el ámbito de la función y ser de tamaño fijo.
Tener todos los elementos del mismo tipo.
Ninguna de las anteriores.
No contesto...
16. GESTIÓN DE MEMORIA DINÁMICA (HEAP)
Los contadores de referencias...
No pueden trabajar con estructuras de datos cíclicas.
Liberan la memoria inmediatamente después de que el programa no la necesita.
La liberación de un bloque puede desencadenar nuevas liberaciones en cascada.
Todas las anteriores.
Ninguna de las anteriores.
No contesto...
17. El gestor de memoria basado en una lista ordenada de bloques libres...
No 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...
18. Si un apuntador ocupa 4 bytes y se utiliza un gestor de memoria que guarda la información de los bloques de memoria en sus extremos. ¿Cuál es el tamaño mínimo en bytes que necesita el gestor de memoria para cada bloque libre?
4
8
12
16
Ninguna de las anteriores.
No contesto...
19. 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...
20. ¿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 sólo cuando no queda más memoria.
La gestión de memoria explícita facilita la comparación de la memoria ocupada.
Ninguna de las anteriores.
No contesto...
21. 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...
22. PROGRAMACIÓN FUNCIONAL
¿Cuáles son los problemas que aporta la implementación de la programación funcional respecto a la implementación de la programación imperativa?
Uso intensivo de la recursividad.
Acceso a variables locales de una función después de acabar su ejecución.
Transparencia referencial.
a) y b)
Ninguna de las anteriores.
No contesto...
23. 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...
24. ¿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...
25. ¿Qué sería incorrecto en un lenguaje funcional?
Definir una función dentro de otra.
Retornar un apuntador a una variable local.
Definir una función lambda.
Definir una variable local.
Ninguna de las anteriores.
No contesto...
26. PROGRAMACIÓN LÓGICA
¿Cómo se representa el desonocido?
Mediante un apuntador cíclico.
Mediante un átomo.
Mediante un functor.
Mediante un valor constante.
Ninguna de las anteriores.
No contesto...
27. ¿Cuándo se puede eliminar un ámbito de la pila en prolog?
Al acabar la ejecución de una regla y si no tiene por encima ningún punto de elección.
Al acabar la ejecución de una regla.
Sólo después de un cut.
Al salir de una función.
Ninguna de las anteriores.
No contesto...
28. 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...
29. 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...
30. ¿Qué significa no poder aplicar ninguna transición de estado en la ejecución de un programa mediante una gramática interpretativa, sin estar vacía 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.
a) y b)
Ninguna de las anteriores.
No contesto...
31. ¿Qué relaciones de cálculo se pueden dar en una gramática con atributos?
Un atributo puede depender de cualquier otro atributo de la misma regla BNF.
Un atributo heredado sólo puede depender de otros atributos heredados.
Un atributo sintetizado sólo puede depender de otros atributos sintetizados.
Sólo los atributos heredados puede depender de cualquier atributo.
Ninguna de las anteriores.
No contesto...
32. ¿Qué ventajas aporta el uso de gramáticas con atributos?
Son independientes del analizador sintáctico utilizado.
Su notación marca dónde se puede producir errores semánticos.
a) y b)
Se implementan facilmente.
Ninguna de las anteriores.
No contesto...
33. La semántica interpretativa:
Define como funcionan los intérpretes.
Define como se ejecutan las instrucciones.
Define formalmente las herramientas interactivas.
Todas las anteriores.
Ninguna de las anteriores.
No contesto...
Check...