Какие компиляторы оптимизации выполняют при чтении, что требует использования ключевого слова Volatile? - PullRequest
3 голосов
/ 04 июля 2011

Мышление в C ++ говорит

квалификатор volatile сообщает компилятор «Вы никогда не знаете, когда это изменится », и предотвращает компилятор от выполнения любого оптимизации на основе стабильности этой переменной.

Какую часть оптимизации (помимо кэширования) выполняет компилятор?

Ответы [ 2 ]

9 голосов
/ 04 июля 2011

Самая базовая оптимизация: сохранение значения переменной в регистре процессора. Объявление его как volatile заставляет генератор кода всегда перезагружать значение из памяти вместо использования кэшированной копии в регистре.

3 голосов
/ 05 июля 2011

Распространенной оптимизацией является изменение порядка операций чтения или записи.Это может помочь в достижении лучшего параллелизма для конвейерных операций, которые в противном случае могли бы привести к «остановкам» (когда компилятор вставляет, ожидает или не выполняет операции для предотвращения опасностей ).

Если переменная помеченаэнергозависимый, он может предотвратить переупорядочение операций такого типа за счет использования барьеров памяти.Как это происходит, зависит от реализации.Чтобы увидеть, что делает компилятор Microsoft C ++, вы можете обратиться к справочнику MSDN на volatile.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...