ASIGNACIÓN ESTÁTICA Y DINÁMICA DE MEMORIA

Asignación estática
• Se reserva espacio en memoria a partir de una posición FIJA, tanto para el código como para los parámetros
formales y variables locales de cada subprograma.

• En este caso:
x <----> 0100
y <----> 0101
z <----> 0111

• La zona reservada para variables locales y parámetros formales usualmente preceden al código del subprograma.

PROBLEMA --> Vinculación de variables en tiempo de compilación --> ¿almacenamiento de las distintas llamadas recursivas? --> Pérdida de los valores de las variables.


Asignación dinámica
• Asignación de cada variable con un parámetro relativo a una posición de retorno (CAB).

• En este caso:
x <----> 1
y <----> 2
z <----> 3

• Dirección de retorno <----> 0

Tiempo de ejecución:
Se reserva espacio para las variables y parámetros a partir de la situación actual de CAB.

Ejemplo con la función factorial
ALGORITMO Factorial(n)
VAR fact
INICIO
SI n == 0 ENTONCES fact = 1
SINO fact = n * Factorial(n-1)
FINSI
DEVOLVER fact
FIN

La invocación inicial es: Resultado=Factorial(3)
que requiere el almacenamiento dinámico de Factorial(2) y Factorial(1).

Observaciones
• Invocación del subalgoritmo a sí mismo.
• Cada llamada al subalgoritmo se realiza con un valor de parámetro que hace el problema "de menor tamaño".
• La llamada al subalgoritmo se realiza siempre en una sentencia de selección.
• En dicha sentencia de selección, al menos debe de haber un caso donde se actúa de forma diferente (no recursiva). Este
es el caso base.
• Ocultación de los detalles de gestión de la memoria en las llamadas recursivas (Pila interna --> CAB).


Volver al índice
Siguiente