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.
- Pourquoi est-ce que volatile existe ? (5 réponses )
Réponses
Trop de publicités?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?
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
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.