ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
19 апреля
625867 Топик полностью
Скрипач, пророк (20.10.2015 10:05 - 10:11, просмотров: 313) ответил SciFi на Цитата читабельна, но бессмысленнабельна.
Есть понятие "контекст". Он делится на: локальный (внутри функции), файла (.с + инклуды) и глобальный (+зарезервированные имена, как минимум).  Обычно компилятор, анализируя эквивалентность конструкций (оптимизация == выбор оптимальной конструкции из нескольких возможных) считает что кроме этого, никакого другого контекста у отдельно взятой операции нет. Volatile же говорит что есть еще какой-то контекст внутри среды исполнения. (Это мы компилятору сказали! Сказали: суслик - там есть! А как оно на самом деле, история умалчивает) Т.е. список однозначных конструкций (внутри которого выбирается оптимальная) существенно уже. В результате: volatile i; i = 0; не эквивалентно: volatile i; i = 0; i = 0; i = 0; i = 0; i = 0; Потому что меняется не только i, но и что-то внутри среды исполнения, невидимое компилятору. Что именно меняется, одно и то же каждый раз или разное, компилятор не знает и знать не собирается. Программист сказал: volatile, значит так оно и есть.
... но не любой ценой.