Das Schlüsselwort register in C

Waqar Aslam 12 Oktober 2023
  1. eine Übersicht über das Schlüsselwort register in der Programmiersprache C
  2. Verwendung des Schlüsselworts Register in C
  3. Abrufen der Adresse einer Registervariablen in C
  4. Verwenden Sie das Schlüsselwort register mit einer Zeigervariablen in C
  5. Verwendung von Speicherklassen mit Schlüsselwort register in C
  6. Geltungsbereich der Variable register in der Programmiersprache C
Das Schlüsselwort register in C

Dieser Artikel behandelt das Schlüsselwort register in der Programmiersprache C.

eine Übersicht über das Schlüsselwort register in der Programmiersprache C

Alle Variablen in einem C-Programm werden im Speicher gespeichert, jede mit ihrer Speicheradresse. Wenn Sie jedoch das Schlüsselwort register in Verbindung mit einer Variablen verwenden, speichert der Compiler die Variable eher in einem CPU-Register als im Arbeitsspeicher.

Falls Sie es nicht wussten, ein Prozessor hat eine endliche Anzahl von Allzweckregistern, und es liegt in der Verantwortung der zentralen Verarbeitungseinheit (CPU), alle Variablen in ihre jeweiligen Register zu laden, bevor arithmetische oder logische Operationen an Daten durchgeführt werden.

Register sind viel schneller als Speicher, und der Zugriffszeitgeber für die CPU ist entsprechend kürzer.

Als Ergebnis koppeln wir ein register-Schlüsselwort mit einer Variable mit der höchsten Häufigkeit des Auftretens im gesamten Programm. Das Schlüsselwort register teilt dem Compiler mit, dass die betreffende Variable in einem Prozessorregister gespeichert werden soll, damit sie in kürzester Zeit abgerufen werden kann.

Es bleibt jedoch dem Compiler überlassen, ob er diese Variable im Speicher oder in einem Prozessorregister speichert oder nicht.

Betrachten wir mehrere Szenarien, in denen das Schlüsselwort register in den Programmen verwendet werden kann.

Verwendung des Schlüsselworts Register in C

Unten ist ein einfaches Beispiel für das Schlüsselwort register, das in der Programmiersprache C verwendet wird.

#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;
}

Ausgang:

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

Abrufen der Adresse einer Registervariablen in C

Angenommen, Sie platzieren ein register-Schlüsselwort mit einer Variablen. In diesem Fall können Sie nicht mit dem unären Adressoperator & auf die Adresse der Variablen zugreifen, selbst wenn der Compiler entscheidet, die Variable im Speicher statt in einem CPU-Register zu speichern.

Dies ist eine entscheidende Tatsache, die Sie im Auge behalten sollten.

Wenn Sie den Adressoperator & mit einer Registervariable kombinieren, gibt Ihnen der verwendete Compiler entweder eine Warnung oder einen Fehler aus. Die Nachricht, die Sie erhalten, hängt davon ab, um welche es sich handelt.

Denn wenn Sie das Schlüsselwort register mit einer Variablen verwenden, kann der Wert der Variablen in einem Prozessorregister statt im Speicher platziert werden, und Prozessorregister haben keine Adresse. Nehmen wir ein Beispiel.

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

Ausgang:

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

Verwenden Sie das Schlüsselwort register mit einer Zeigervariablen in C

Das Schlüsselwort register kann mit dem Zeiger verwendet werden. Es kann die Adresse eines Speicherplatzes haben.

Hier ist ein Beispiel für das Schlüsselwort register, das mit der Zeigervariablen in der Programmiersprache C verwendet wird.

#include <stdio.h>

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

Ausgang:

The value of the pointer is: 15

Verwendung von Speicherklassen mit Schlüsselwort register in C

Die Programmiersprache C erlaubt nicht die Verwendung verschiedener Speicherklassenbezeichner für eine einzelne Variable. Das Register ist eine Speicherklasse.

Daher können Sie das Register nicht in Kombination mit static, auto und extern verwenden.

#include <stdio.h>

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

Ausgang:

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

Geltungsbereich der Variable register in der Programmiersprache C

Das Schlüsselwort register kann nur in Verbindung mit einer lokalen Variablen verwendet werden; Es ist nicht möglich, ein Register mit einer Variablen mit globalem Geltungsbereich zu verwenden.

#include <stdio.h>

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

Ausgang:

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