Функция volatile влияет на переменные в обработчике прерываний, предотвращая ненужные оптимизации кода. 23
Компилятор может сохранять в регистре копии основных переменных кода, чтобы обеспечить максимальную скорость доступа к ним. 3 Однако это может привести к подмене реальных значений сохранёнными копиями и потере функциональности. 3
Использование volatile сообщает компилятору, что переменная может быть изменена не только из текущего выполняемого кода, но и из других мест. 4 Тогда компилятор будет избегать определённых оптимизаций этой переменной. 4
Кроме того, пометка переменной как volatile указывает компилятору не «кэшировать» содержимое переменной в регистр процессора, а всегда считывать его из памяти, когда это необходимо. 5 Это может замедлить обработку. 5