0 Tage Serie
c / intermediate
Snippet

Der volatile Typ-Qualifizierer

Das Schlüsselwort 'volatile' teilt dem Compiler mit, dass sich der Wert einer Variablen jederzeit ändern kann, ohne dass der umgebende Code eine Aktion ausführt. Dies verhindert, dass der Compiler Optimierungen anwendet, die das erneute Lesen des Speicherorts überspringen könnten, was für Memory-Mapped I/O oder Signalverarbeitung entscheidend ist.

snippet.c
c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
// Imagine this variable is modified by hardware or a signal handler
volatile int status_flag = 0;
void wait_for_ready() {
printf("Waiting...\n");
while (status_flag == 0) {
// The compiler is forced to reload status_flag from memory in every iteration
}
printf("Ready!\n");
}
int main() {
// status_flag = 1; // In a real scenario, this would happen externally
return 0;
}
Erklärung
1
volatile int status_flag = 0;
Deklariert einen Integer, den der Compiler nicht optimieren oder in Registern zwischenspeichern darf.
2
while (status_flag == 0)
Stellt sicher, dass die Schleife jedes Mal die tatsächliche Speicheradresse prüft, selbst wenn es für den Compiler redundant erscheint.