Skip to content

Gestión de Memoria

Objetivo

Al programar en código máquina hay que indicar expresamente en qué dirección de memoria se quiere escribir cada valor, asegurándose de que los distintos valores no se solapen. En cambio, en un lenguaje de un nivel superior, el programador no tiene que preocuparse por realizar esta tarea.

Supóngase el siguiente programa en el lenguaje de programación C:

c
int cont;

void f() {
    cont = 5;
}

Cuando el programador escribe la definición de cont, lo que le está encargando al compilador es que busque por él una dirección de memoria que esté libre (al programador le es indiferente cuál sea ésta), de tal manera que a partir de ahora pueda referirse a dicha posición de memoria por un nombre en vez de por un número. Así, cuando posteriormente se realiza la asignación en la función f, el compilador deberá guardar el 5 en la zona de memoria a la que le haya asignado dicho nombre.

Por tanto, este es el objetivo de esta fase del compilador: asignar una dirección libre a cada variable del programa. De esta manera, en la siguiente etapa, selección de instrucciones, cada referencia a una variable podrá ser sustituida por la dirección que se le haya asignado aquí.

Supóngase que se ejecuta el compilador sobre la siguiente entrada:

java
DATA
	float f1;
	int i1;
	float f2;
	int i2;

CODE

En este caso, suponiendo los tamaños indicados en la descripción del lenguaje, las variables debería quedar con las siguientes direcciones:

VariableDirección
f10
i14
f26
i210