web-dev-qa-db-fra.com

Pourquoi utilisons-nous des mots clés volatiles?

Duplicate possible:
C++: Quand le mot-clé volatile vous a-t-il déjà aidé?

Je ne l'ai jamais utilisé mais je me demande pourquoi les gens l'utilisent? Que fait-il exactement? J'ai cherché dans le forum, je n'ai trouvé que des sujets en C # ou Java.

331
Nawaz

Considérons ce code,

int some_int = 100;

while(some_int == 100)
{
   //your code
}

Lorsque ce programme est compilé, le compilateur peut optimiser ce code s'il trouve que le programme never tente de modifier la valeur de some_int, de sorte qu'il peut être tenté d'optimiser la while boucle en le changeant de while(some_int == 100) à quelque chose équivalent à while(true) de sorte que l'exécution puisse être rapide (car la condition La boucle while semble être true toujours). (si le compilateur ne l'optimise pas, il doit extraire la valeur de some_int et le comparer à 100, à chaque itération, ce qui est évidemment un peu lent.)

Cependant, parfois, l'optimisation (de certaines parties de votre programme) peut être indésirable, car il se peut que quelqu'un d'autre modifie la valeur de some_int de en dehors du programme qui le compilateur n’a pas conscience de, car il ne peut pas le voir; mais c'est comme ça que vous l'avez conçu. Dans ce cas, l'optimisation du compilateur pourrait pas produire le résultat souhaité!

Ainsi, pour garantir le résultat souhaité, vous devez empêcher le compilateur d’optimiser la boucle while. C’est là que le mot clé volatile joue son rôle. Tout ce que tu as à faire c'est ça,

volatile int some_int = 100; //note the 'volatile' qualifier now!

En d'autres termes, j'expliquerais ceci comme suit:

volatile indique au compilateur que,

"Hé compilateur, je suis volatile et, tu sais, je peux être changé par un XYZ dont tu n'es même pas au courant. Ce XYZ pourrait être n'importe quoi. Peut-être qu'un alien en dehors de cette planète s'appelle programme. Peut-être un éclairage, une forme d’interruption, les volcans, etc., peuvent muter en moi. Peut-être. On ne sait jamais qui va me changer! Alors, O ignorant, arrête de jouer à un dieu qui sait tout et n’ose pas toucher au code où je suis présent. Ok ? "

Eh bien, c’est ainsi que volatile empêche le compilateur d’optimiser le code. Maintenant, recherchez sur le Web pour voir quelques exemples.


Citation de la norme C++ (7.1.5.1/8 $)

[..] volatile est un indice pour l'implémentation de éviter l'optimisation agressive impliquant l'objet ​​car la valeur de l'objet peut être modifiée par des moyens indétectables par une implémentation. [...]

Sujet connexe:

Rendre une structure volatile rend-t-il tous ses membres volatiles?

1038
Nawaz

En programmation informatique, en particulier dans les langages de programmation C, C++ et C #, une variable ou un objet déclaré avec le mot clé volatile possède généralement des propriétés spéciales liées à l'optimisation et/ou au threading. De manière générale, le mot clé volatile est destiné à empêcher le (pseudo) compilateur d'appliquer des optimisations sur le code qui supposent que les valeurs des variables ne peuvent pas changer "par elles-mêmes". (c) Wikipedia

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

16
Ivan