-
- volatile указатель - это для компилятора данные. Инициализация такого указателя требует модификации данных. А если указатель помечен как volatile, то компилятор ограничен в выводах может ли такая модификация на чтото повлиять или не может. Поэтому sladkoejka(430 знак., 06.07.2018 16:30)
- С точки зрения даже абстрактной машины, локальная переменная - это переменная в памяти, а не в регистре. Нет никаких таких регистров в языке Си. А volatile обозначает именно внешние побочные эффекты в памяти. Всё, финита. Никакие =AlexD=(76 знак., 06.07.2018 16:46)
- В порядке уточнения. Переменные могут быть размещены в регистрах, для этого существует специальный квалификатор класса памяти - register. Только по-моему, современные компиляторы его игнорируют. Или нет? - Bill(06.07.2018 18:20)
- это просто рекомендация компилятору хранить переменную в регистре. Компилятор может её не придерживаться. - sladkoejka(06.07.2018 18:29)
- Соглашусь, но это действительно только при условии, что код модифицирует данные данные через volatile указатель. Через указатель можно изменить любую ячейку памяти, которая доступна другому коду. А если не модифицирует, то на данные никак не sladkoejka(40 знак., 06.07.2018 18:03 - 18:11)
- В порядке уточнения. Переменные могут быть размещены в регистрах, для этого существует специальный квалификатор класса памяти - register. Только по-моему, современные компиляторы его игнорируют. Или нет? - Bill(06.07.2018 18:20)
- С точки зрения даже абстрактной машины, локальная переменная - это переменная в памяти, а не в регистре. Нет никаких таких регистров в языке Си. А volatile обозначает именно внешние побочные эффекты в памяти. Всё, финита. Никакие =AlexD=(76 знак., 06.07.2018 16:46)
- volatile указатель - это для компилятора данные. Инициализация такого указателя требует модификации данных. А если указатель помечен как volatile, то компилятор ограничен в выводах может ли такая модификация на чтото повлиять или не может. Поэтому sladkoejka(430 знак., 06.07.2018 16:30)