Parcial 1: Proceso de compilación y Memory Layout en C. Flashcards

1
Q

Menciona los pasos de generación de un ejecutable (de archivo .c a archivo .exe).

A
  1. Pre-processor -> Expande las macros en sentencias del lenguaje fuente.
  2. Compiler -> Produce un programa en lenguaje ensamblador, éste es más fácil de depurar.
  3. Assembler -> Reubica el código máquina.
  4. Linker -> Encargado de combinar diferentes librerías con los archivos tipo objeto en un único archivo ejecutable de output.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

¿Qué es un compilador?

A

Programa que es capaz de leer un programa en un código y traducirlo en un programa equivalente pero en otro lenguaje (en el caso de c, en código máquina).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Describe los pasos de compilación.

A
  1. Análisis -> Se parte en pedazos el código fuente, y se crean estructuras para crear una representación intermedia de ese código.
  2. Síntesis -> Se crea el programa en el lenguaje deseado con la representación intermedia obtenida en el análisis.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Cuando hablamos de conceptos como frontend y backend, ¿a qué etapa de compilación nos referimos?

A

Etapa de análisis.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

En la etapa de análisis, esta sección o “sub-etapa” incluye el análisis léxico, sintaxis y semántica del código.

A

Frontend

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

¿A qué se refiere la sección o “sub-etapa” de backend?

A

Se refiere a la generación y optimización del código.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

¿Qué es un lexema?

A

Secuencia significativa, creada durante la etapa de análisis léxico. Tienen esta sintáxis:

< token-name, attribute-value >

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Procesos que engloba el front end.

A
  1. Análisis léxico
  2. Análisis sintáctico
  3. Análisis semántico
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Procesos que engloba el back end.

A
  1. Code optimizer.

2. Code generator.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

¿Qué es la tabla de símbolos?

A

Estructura de datos donde se guarda información del código fuente, generalmente la info. son los identificadores, su valor, etc.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

En esta proceso del front end, el output del análisis léxico para identificar posibles errores.

A

Análisis sintáctico.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

En este proceso del front end, se verifica que el código fuente tenga consistencia semántica con la definición del lenguaje. Aquí también ser revisa el tipo de dato y se verifica que cada operador corresponda a los operandos.

A

Análisis semántico.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Podemos decir que la etapa de análisis, se divide en estos procesos.

A
  1. Front End
  2. Código intermedio
  3. Back End
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

El código intermedio debe de contar con 2 características:

A
  • Fácil de producir

- Fácil de ser traducido al lenguaje deseado.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Definición de “build”.

A

Se refiere a todo el proceso de transformación de código fuente a un ejecutable.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

¿Qué contiene el Zero-Initialized Data (.bss)?

A

Las variables globales y estáticas que NO se inicializan.

17
Q

¿Qué contiene el .data?

A

Initialized Data, las variable globales y estáticas que SÍ están inicializadas.

18
Q

¿Qué contiene el Stack?

A

Las variables locales que están siendo utilizadas por el programa y que NO están en el .bss ni en el .data

19
Q

¿Qué contiene el Heap?

A

Se utiliza para obtener espacio durante la ejecución de programa (memoria dinámica).

20
Q

En este código:

int a, b;
int e = 0x07;

int main(void) {
  float c = 72.5f;
  char d[32];
  char *str;
  c = 9.81;
  str = (char *) malloc(4);
}

¿Que variables estarán en .bss, .data, stack y heap?

A

En el .bss estarán a y b, ya que son variables globales sin inicializar.

En el .data estará e, porque es una variable global inicializada.

En el stack estarán c, d y str, cuando sean llamadas en la ejecución del programa.

En el heap estará la asignación que se le hace a str (la línea con la función de malloc).