Почему мы используем ключевое слово volatile в C++? [дубликат]
Возможные Дубликаты:
C++: когда ключевое слово volatile когда-либо помогало вам?
Я никогда не использовал его, но мне интересно, почему люди используют его? Что именно он делает? Я искал форум, Я нашел его только темы C# или Java.
2 ответа:
рассмотрим этот код,
int some_int = 100; while(some_int == 100) { //your code }
когда эта программа компилируется, компилятор может оптимизировать этот код, если он считает, что программа никогда никогда не делает никаких попыток изменить значение
some_int
, Так что может возникнуть соблазн оптимизироватьwhile
цикл, изменив его сwhile(some_int == 100)
простоwhile(true)
так что казнь может быть быстрым (так как условиеwhile
петли представляетсяtrue
всегда). (если компилятор не оптимизирует его, то он должен получить значениеsome_int
(если он не загружен в регистр) и сравнить его с 100, каждый раз, когда это, очевидно, немного медленно.)однако иногда оптимизация (некоторых частей вашей программы) может быть нежелательными, потому что это может быть, что кто-то меняет значение
some_int
С вне программы, о которой компилятор не знает, так как он не может видеть его; но это то, как вы его спроектировали. В таком случае, оптимизация компилятора будет не получения желаемого результата!так, чтобы обеспечить желаемый результат, вам нужно как-то остановить компилятор с оптимизацией
while
петли. Вот гдеvolatile
ключевое слово играет свою роль. Все, что вам нужно сделать, этоvolatile int some_int = 100; //note the 'volatile' qualifier now!
другими словами, Я бы объяснил это следующим образом:
volatile
сообщает компилятору, что"Эй, компилятор, я волатильным, и вы знаете, я могу быть изменен некоторыми XYZ о чем ты даже не догадываешься. Что XYZ может быть чем угодно. Может быть, некоторые иностранца за пределами этой планеты программа. Может быть, какое-то освещение, некоторые форма прерывания, вулканы и т. д. Может мутируй меня. Возможно. Никогда не знаешь кто это изменит меня! Так что о тебе невежественный, перестань играть всезнающего Боже, и не смей трогать код где я присутствую. Ладно?"
Ну вот как
volatile
мешает компилятору оптимизировать код. Теперь google это, чтобы увидеть некоторые примеры примеров.
цитирование из стандарта C++ ($7.1.5.1 / 8)
[..] летучих намек на реализация в избегайте агрессивных оптимизация с участием объекта потому что значение объекта может было обнаружить путем реализация.[...]
похожие темы:
в компьютерном программировании, особенно в языках программирования C, C++ и C#, переменная или объект, объявленный с помощью
volatile
ключевое слово обычно имеет специальные свойства, связанные с оптимизацией и / или потоковой обработкой. Вообще говоря, предназначено для предотвращения (псевдо)компилятора от применения каких-либо оптимизаций в коде, которые предполагают, что значения переменных не могут изменяться "самостоятельно."с) Википедия