volatile
заключается в том, чтобы сообщить компилятору не оптимизировать ссылку, чтобы каждое чтение/запись не использовало значение, хранящееся в регистре, но имело реальный доступ к памяти. Я могу понять, что это полезно для некоторой обычной переменной, но не понимает, как volatile
влияет на указатель.
volatile int *p = some_addr;
int a = *p; // CPU always has to load the address, then does a memory access anyway, right?
В чем разница, если он был объявлен как int *p = some_addr
?