История изменений
Исправление byko3y, (текущая версия) :
volatile используется в довольно ограниченном числе случаев, обычно в обработчиках сигналов и прерываний. Это слишком частный случай, чтобы называть оптимизацию всего остального некорректной.
Ввод-вывод и многопоточность-многозадачность (разделяемая память) как минимум. Си был изначально однозадачным ЯП с синхронным вводом-выводом, но такой подход давно неактуален, потому необходимость деоптимизации нынче намного больше, просто делается она не только через volatile, а, например, через встроенные атомарные функции (__atomic_***). В ОС, которая работает с устройствами через память, это вообще беда, там сплошные volatile в драйверах, но это всё-таки больше про ядро, а не userspace.
Исходная версия byko3y, :
volatile используется в довольно ограниченном числе случаев, обычно в обработчиках сигналов и прерываний. Это слишком частный случай, чтобы называть оптимизацию всего остального некорректной.
Ввод-вывод и многопоточность-многозадачность (разделяемая память) как минимум. Си был изначально однозадачным ЯП с синхронным вводом-выводом, но такой подход давно неактуален, потому необходимость деоптимизации нынче намного больше, просто делается она не только через volatile, а, например, через встроенные атомарные функции (__atomic_***). В ОС, которая работает с устройствами через память, это вообще беда, там сплошные volatile, но это всё-таки больше про ядро, а не userspace.