443 votes

Pourquoi utilisons-nous un mot clé volatile en C ++?

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

Je ne l'ai jamais utilisé mais je me demande pourquoi les gens l'utilisent? Qu'est-ce que ça fait exactement? J'ai cherché sur le forum, je l'ai trouvé que des sujets C # ou java.

1301voto

Nawaz Points 148870

Envisager le présent code,

int some_int = 100;

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

Lorsque ce programme sera compilé, le compilateur peut optimiser ce code, s'il constate que le programme de jamais fait jamais toute tentative de modifier la valeur de some_int, de sorte qu'il peut être tenté d'optimiser l' while boucle en changeant d' while(some_int == 100) simplement while(true) , de sorte que l'exécution pourrait être rapide (puisque la condition en while boucle semble être true toujours). (si le compilateur n'a pas l'optimiser, il faut ensuite aller chercher la valeur de some_int (si il n'est pas chargé sur un registre) et de la comparer avec les 100, à chaque fois, 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 est en train de changer la valeur de some_int de l'extérieur du programme, le compilateur n'en est pas conscient, puisqu'il ne peut pas le voir; mais c'est la façon dont vous avez conçu. Dans ce cas, le compilateur d'optimisation serait de ne pas produire le résultat souhaité!

Ainsi, pour assurer le résultat souhaité, vous avez besoin de quelque peu arrêter le compilateur à partir de l'optimisation de l' while boucle. C'est là que l' volatile mot-clé qu'il joue son rôle. Tout ce que vous devez faire est de cela,

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

En d'autres mots, je l'explique comme suit:

volatile indique au compilateur que,

"Hey compilateur, je suis instable et, vous sais, je peux être modifié par certains XYZ que vous n'êtes même pas conscient. Que XYZ pourrait être n'importe quoi. Peut-être certains alien en dehors de cette planète que l'on appelle programme. Peut-être un peu de lumière, quelques forme d'interruption, les volcans, etc. muter moi. Peut-être. Vous ne savez jamais qui va me changer! Donc O vous ignorants, arrêtez de jouer un tout en sachant dieu, et n'ose pas toucher au code où je suis présent. D'accord?"

Eh bien, c'est combien de volatile empêche le compilateur à partir de l'optimisation de code. Maintenant google pour voir quelques exemples de exemples.


Citant la Norme C++ ($7.1.5.1/8)

[..] volatile est une allusion à l' mise en œuvre pour éviter agressif optimisation impliquant l'objet parce que la valeur de l'objet pourrait être modifiées par le biais indétectable par un la mise en œuvre.[...]

Sujets connexes:

Ne faire une struct volatils faire tous ses membres volatile?

23voto

Ivan Points 2346

En programmation informatique, en particulier dans le C, le C++ et le C# langages de programmation, une variable ou un objet déclaré avec le mot clé volatile a généralement des propriétés particulières liées à l'optimisation et/ou le filetage. Généralement parlant, le mot clé volatile est destinée à prévenir les (pseudo)compilateur appliquer des optimisations sur le code qui assument les valeurs des variables ne peut pas changer "sur leur propre." (c) Wikipedia

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

0voto

Patrice Bernassola Points 7422

Voici une définition complète et une explication de son utilisation: http://msdn.microsoft.com/en-us/library/12a04hfd%28v=vs.80%29.aspx

J'espère que cela pourra aider.

-2voto

Nanda Points 417

Le mot-clé volatile est un qualificateur de type utilisé pour déclarer qu'un objet peut être modifié dans le programme par quelque chose comme le système d'exploitation, le matériel ou un thread s'exécutant simultanément.

déclarateur volatile;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X