« Les opérations bit à bit/L'échange de deux variables » : différence entre les versions

Contenu supprimé Contenu ajouté
Ligne 58 :
</syntaxhighlight>
 
Cette technique était utilisée comme optimisation sur les anciens processeurs, sur lesquels les opérations bit à bit étaient plus rapides que les opérations arithmétiques. Mais les processeurs modernes peuvent échanger facilement deux registres très rapidement par simple renommage, en une seule instruction pouvant prendre un seul cycle d'horloge. En conséquence, cette méthode n'est utile que sur les anciens processeurs et les petits microcontrôleurs qui ne possèdent que très peu de registres, dans un objectif d'optimisation certain.
Toutefois il faut faire attention quand les variables utilisées sont indirectement accédées à travers des pointeurs ou des références : il ne faut pas que les deux pointeurs ou références pointent la même adresse mémoire, sinon le contenu est perdu et remis à zéro.
 
===Fonctionnement du ''trick''===
Cette technique est utilisée comme optimisation, notamment en assembleur, car les anciens processeurs effectuent les opérations arithmétiques, comme l'addition et la soustraction utilisées par la première technique, plus lentement que les opérations binaires comme le XOR utilisé par la deuxième.
Tandis que les processeurs modernes peuvent échanger facilement deux registres très rapidement par simple renommage, en une seule instruction pouvant prendre un seul cycle d'horloge.
En conséquence, cette méthode reste utile sur les anciens processeurs et les petits microcontrôleurs qui ne possèdent que très peu de registres, dans un objectif d'optimisation certain.
 
Le fonctionnement de cette méthode se base sur le fait que <math> ( x \oplus y ) \oplus y = x </math>. Faites les calculs vous-même : <math> ( x \oplus y ) \oplus y = x \oplus ( y \oplus y ) = x \oplus 0 = x</math>. Pour comprendre plus profondément pourquoi cette méthode marche, il suffit de regarder à chaque étape ce que l'on trouve dans A et dans B.