Registros de activación

En este artículo, vamos a explicar los enlaces de acceso y los enlaces de control. Bueno, ambos están en el campo de los Registros de Activación .

Registro de Activación
Un registro de activación es un bloque contiguo de almacenamiento que administra información requerida por una sola ejecución de un procedimiento. Cuando ingresa a un procedimiento, asigna un registro de activación, y cuando sale de ese procedimiento, lo desasigna. Básicamente, almacena el estado de la función de activación actual. Entonces, cada vez que ocurre una llamada de función, se crea un nuevo registro de activación y se colocará en la parte superior de la pila. Estará en función hasta la ejecución de esa función. Entonces, una vez que se complete el procedimiento y se devuelva a la función de llamada, esta función de activación se eliminará de la pila.
Si se llama a un procedimiento, se inserta un registro de activación en la pila y se extrae cuando el control vuelve a la función de llamada.

El registro de activación incluye algunos campos que son: 
valores de retorno, lista de parámetros, enlaces de control, enlaces de acceso, estado de la máquina guardada, datos locales y temporales.

Registro de activación

Temporales:

Los valores temporales, como los que surgen en la evaluación de expresiones, se almacenan en el campo para temporales.

Datos locales:

El campo para datos locales contiene datos que son locales para la ejecución de un procedimiento. 

Estados guardados de la máquina:

El campo para Estado de la máquina guardada contiene información sobre el estado de la máquina justo antes de llamar al procedimiento. Esta información incluye el valor del contador del programa y los registros de la máquina que deben restaurarse cuando el control regresa del procedimiento.

Enlace de acceso: 
Se refiere a la información almacenada en otros registros de activación que no es local. El enlace de acceso es un enlace estático y el objetivo principal del enlace de acceso es acceder a los datos que no están presentes en el ámbito local del registro de activación. Es un enlace estático. 
Tomemos un ejemplo para entender esto:

C

#include <stdio.h>
int g=12;
void Geeks()
{
  printf("%d", g);
}
void main()
{
 Geeks();
}

Ahora, en este ejemplo, cuando se llama a Geeks() en main(), la tarea de Geeks() en main() es imprimir (g), pero g no está definida dentro de su alcance (alcance local de Geeks() ); en este caso, Geeks() usaría el enlace de acceso para acceder a ‘g’ desde Global Scope y luego imprimiría su valor (g=12).

Como una string de enlaces de acceso (piense en los ámbitos), el programa rastrea su estructura estática.
Ahora, tomemos otro ejemplo para comprender el concepto de enlace de acceso en detalle:

C

#include <stdio.h>
 
 int main (int argc, char *argv[]) {
   int a = 100;
 
     int geeks(int b) {
     int c = a+b;
     return c;
     }
 
     int geek1(int b) {
     return geeks(2*b);
     }
  (void) printf("The answer is %d\n", geek1(a));
 return 0;
 }

No se detectan errores al compilar el programa y se muestra la respuesta correcta, que es 300. Ahora, analicemos las rutas de anidamiento. Los procedimientos anidados incluyen un enlace de acceso AR (Registro de activación) que permite a los usuarios acceder al AR de la acción más reciente realizada por su procedimiento externo inmediato. Entonces, en este ejemplo, el enlace de acceso para geeks y el enlace de acceso para geeks1 apuntarían al AR de la activación de main. 
Cada registro de activación recibe un puntero llamado enlace de acceso que facilita la implementación directa de la regla de alcance estático normal. 

Enlaces de Control:  
En este caso se refiere a un registro de activación del llamante. Generalmente se utilizan para enlaces y estado guardado. Es un enlace dinámico en la naturaleza. Cuando una función llama a otra función, el enlace de control apunta al registro de activación de la persona que llama.
El registro A contiene un enlace de control que apunta al registro anterior en la pila. Los programas ejecutados dinámicamente son rastreados por la string de enlaces de control.
Ejemplo –

C

#include<stdio.h>
int geeks(int x)
{
  printf("value of x is: %d", x);
}
int main()
{
  geeks(10);
}

Tomemos otro ejemplo:

C

#include <stdio.h>
int geeks();
int main() {
    int x, y;
    //Calling a function
    geeks();
  return 0;
}
 
int geeks() {
 
    //Function called from main()
  printf("Function called from main()");
    return 0;
}

Cuando se llama a la función geeks(), utiliza el método de enlace de acceso para acceder a xey (de ámbito estático) en su función de llamada main().

Lista de parámetros:

El campo para la lista de parámetros es utilizado por el procedimiento de llamada para proporcionar parámetros al procedimiento llamado. Mostramos espacio para los parámetros en el registro de activación, pero en la práctica, los parámetros a menudo se pasan en los registros de la máquina para una mayor eficiencia.

Valor de retorno:

El campo para el valor de retorno es utilizado por el procedimiento llamado para devolver un valor al procedimiento de llamada. Nuevamente, en la práctica, este valor a menudo se devuelve en un registro para una mayor eficiencia.

Publicación traducida automáticamente

Artículo escrito por AnujMehla y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *