Почему мы используем ключевое слово volatile в C++? [дубликат]


Возможные Дубликаты:
C++: когда ключевое слово volatile когда-либо помогало вам?

Я никогда не использовал его, но мне интересно, почему люди используют его? Что именно он делает? Я искал форум, Я нашел его только темы C# или Java.

2 276

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)

[..] летучих намек на реализация в избегайте агрессивных оптимизация с участием объекта потому что значение объекта может было обнаружить путем реализация.[...]

похожие темы:

делает ли структура volatile все ее члены летучие?

в компьютерном программировании, особенно в языках программирования C, C++ и C#, переменная или объект, объявленный с помощью volatile ключевое слово обычно имеет специальные свойства, связанные с оптимизацией и / или потоковой обработкой. Вообще говоря, предназначено для предотвращения (псевдо)компилятора от применения каких-либо оптимизаций в коде, которые предполагают, что значения переменных не могут изменяться "самостоятельно."с) Википедия

http://en.wikipedia.org/wiki/Volatile_variable