La palabra clave de registro en C

Waqar Aslam 12 octubre 2023
  1. una descripción general de la palabra clave register en el lenguaje de programación C
  2. Uso de la palabra clave register en C
  3. Obtener la dirección de una variable register en C
  4. Use la palabra clave register con una variable de puntero en C
  5. Uso de clases de almacenamiento con la palabra clave register en C
  6. Alcance de la variable register en lenguaje de programación C
La palabra clave de registro en C

Este artículo discutirá la palabra clave register en el lenguaje de programación C.

una descripción general de la palabra clave register en el lenguaje de programación C

Todas las variables en un programa C se guardan en la memoria, cada una con su dirección de memoria. Sin embargo, si usa la palabra clave register junto con una variable, es más probable que el compilador guarde la variable en un registro de la CPU que en la memoria.

En caso de que no lo supiera, un procesador tiene un número finito de registros de propósito general, y es responsabilidad de la unidad central de procesamiento (CPU) cargar todas las variables en sus respectivos registros antes de realizar operaciones aritméticas o lógicas en los datos.

Los registros son mucho más rápidos que la memoria y, en consecuencia, el temporizador de acceso a la CPU es más corto.

Como resultado, emparejamos una palabra clave register con una variable con la mayor frecuencia de ocurrencia a lo largo del programa. La palabra clave register le dice al compilador que la variable en cuestión debe almacenarse en un registro del procesador para que pueda recuperarse en el menor tiempo posible.

Sin embargo, depende del compilador decidir si almacenar o no esta variable en la memoria o en un registro del procesador.

Veamos múltiples escenarios donde la palabra clave register se puede usar en los programas.

Uso de la palabra clave register en C

A continuación se muestra un ejemplo simple de la palabra clave register utilizada en el lenguaje de programación C.

#include <stdio.h>

int main() {
  register char a = 'S';
  register double b = 10;
  register int c = 8;
  printf("The value of register variable a: %c\n", a);
  printf("The value of register variable b: %f\n", b);
  printf("The value of register variable c: %d", c);
  return 0;
}

Producción :

The value of register variable a: S
The value of register variable b: 10.000000
The value of register variable c: 8

Obtener la dirección de una variable register en C

Supongamos que coloca una palabra clave register con una variable. En ese caso, no puede acceder a la dirección de la variable utilizando el operador de dirección unaria & incluso si el compilador decide almacenar la variable en la memoria en lugar de un registro de la CPU.

Este es un dato crucial a tener en cuenta.

Si combina el operador de dirección & con una variable de registro, el compilador que está utilizando le dará una advertencia o un error. El mensaje que recibas dependerá de cuál sea.

Porque cuando usa la palabra clave register con una variable, el valor de la variable se puede colocar en un registro del procesador en lugar de en la memoria, y los registros del procesador no tienen ninguna dirección. Tomemos un ejemplo.

#include <stdio.h>
int main() {
  register int registerVariable = 22;
  int* ptr = &registerVariable;
  printf("%d", *ptr);
  return 0;
}

Producción :

main.c: In function ‘main’:
main.c:5:5: error: address of register variable ‘registerVariable’ requested
    5 |     int* ptr = &registerVariable;
      |     ^~~

Use la palabra clave register con una variable de puntero en C

La palabra clave register se puede utilizar con el puntero. Puede tener la dirección de una ubicación de memoria.

Aquí hay un ejemplo de la palabra clave register utilizada con la variable de puntero en el lenguaje de programación C.

#include <stdio.h>

int main() {
  int value = 15;
  register int* pointerVariable = &value;
  printf("The value of the pointer is: %d", *pointerVariable);
  return 0;
}

Producción :

The value of the pointer is: 15

Uso de clases de almacenamiento con la palabra clave register en C

El lenguaje de programación C no permite usar varios especificadores de clase de almacenamiento para una sola variable. El registro es una clase de almacenamiento.

Por lo tanto, no puede usar el registro en combinación con static, auto y extern.

#include <stdio.h>

int main() {
  auto register int value = 15;
  printf("The value of the pointer is: %d", value);
  return 0;
}

Producción :

main.c: In function ‘main’:
main.c:5:5: error: multiple storage classes in declaration specifiers
    5 |     auto register int value = 15;
      |     ^~~~

Alcance de la variable register en lenguaje de programación C

Solo es posible utilizar la palabra clave register junto con una variable local; no es posible utilizar un registro con una variable que tiene un alcance global.

#include <stdio.h>

register int value = 22;
int main() {
  printf("%d", value);
  return 0;
}

Producción :

main.c:3:14: error: register name not specified for ‘value’
    3 | register int value = 22;
      |
Waqar Aslam avatar Waqar Aslam avatar

I am Waqar having 5+ years of software engineering experience. I have been in the industry as a javascript web and mobile developer for 3 years working with multiple frameworks such as nodejs, react js, react native, Ionic, and angular js. After which I Switched to flutter mobile development. I have 2 years of experience building android and ios apps with flutter. For the backend, I have experience with rest APIs, Aws, and firebase. I have also written articles related to problem-solving and best practices in C, C++, Javascript, C#, and power shell.

LinkedIn