Orion_ (./103) :
bon vala j'ai mis du volatile partout 
Attention quand même à ne pas mettre le volatile à toutes les sauces ! Même si ce n'est pas gênant pour le fonctionnement, les perfs vont en prendre un sacré coup ; quand une variable est déclarée volatile, TOUS les accès à cette variable se font en RAM, elle n'est jamais mise en cache dans un registre (imagine la catastrophe si tu fais un calcul en plusieurs étapes, par exemple : au lieu de grouper et d'optimiser tes étapes, le compilateur va faire du code qui lit la variable en RAM, fait une étape, écrit la variable en RAM, lit la variable en RAM, fait l'étape d'après, écrit la variable en RAM , etc.

). Si tu dois utiliser une variable volatile, mais qu'il y a des moments où tu sais qu'elle ne va pas changer, c'est plus intéressant de la mettre en cache toi-même en la copiant dans une variable locale non volatile au début, et vice-versa à la fin.
Orion_ (./103) :
(apres quelque test j'ai l'impression qu'il zap le mot clé register en fait, il le fait tout seul quand on utilise les options d'optim)
"register" est une suggestion pour indiquer au compilateur de faire certaines optimisations qu'il n'aurait trouvé de lui-même, ça ne garantit rien. Et pour le plupart des cas courants, le compilateur en mode optimisation détecte déjà tout seul les "bonnes" variables à mettre dans les registres, donc c'est normal que tu ne voie pas la différence.