À retenir
- Indique que la valeur peut changer en dehors du contrôle du code actuel.
- Désactive les optimisations dangereuses du compilateur sur cette donnée.
- Oblige le système à lire la valeur directement à la source (mémoire vive ou registre).
En programmation, on qualifie de volatil un élément dont la valeur peut être modifiée à tout moment par un événement extérieur au programme lui-même (comme un capteur matériel ou une autre tâche en cours). C'est comme un panneau d'affichage publicitaire : vous ne contrôlez pas quand l'image change, vous devez donc regarder l'écran à chaque fois que vous voulez connaître l'affiche actuelle.
Étymologie
Dérivé du latin volatilis (« qui vole », « passager »), le terme exprime l'idée d'une donnée qui n'est pas stable ou fixe dans le temps. En informatique, il est passé d'un adjectif décrivant la mémoire perdant ses données (RAM) à un mot-clé précis pour les développeurs.
Exemples d'usage
- Une variable qui stocke l'état d'un bouton pressoir sur une machine.
- Le registre d'une horloge interne qui avance toute seule.
- Un indicateur de statut partagé entre deux processus travaillant en parallèle.
Cas d'usage
Ce concept est crucial dans le développement système et l'informatique embarquée. Il permet d'avertir le compilateur qu'il ne doit pas essayer d'optimiser l'accès à une variable en la gardant en mémoire cache, car sa source réelle peut changer sans prévenir.
Bonnes pratiques
N'utilisez ce qualificatif que lorsque c'est strictement nécessaire, car il force l'ordinateur à faire des allers-retours lents vers la mémoire principale. Notez aussi que dans certains langages comme le C, être volatile ne suffit pas à rendre une opération sûre entre plusieurs processeurs (problèmes de concurrence).
Synonymes
Antonymes
Conseil
Si vous créez un programme qui communique avec du matériel (comme un capteur de température) et que votre boucle de test semble ne jamais voir le changement de valeur, vérifiez si vous n'avez pas oublié de déclarer votre variable comme volatile.
Questions fréquentes
Pourquoi le compilateur ignorerait-il un changement ?
Par souci de vitesse, le compilateur peut décider de réutiliser une valeur qu'il a déjà lue au lieu d'aller la chercher à nouveau, pensant qu'elle n'a pas bougé.
Est-ce que volatil signifie que la variable va s'effacer ?
Pas du tout. Cela signifie simplement que son contenu est imprévisible et peut être mis à jour par un tiers (matériel ou autre logiciel).