Maison >développement back-end >C++ >Est-ce que
Est-ce que < Plus rapide que <=?
Dans une instruction if typique utilisant l'opérateur de comparaison < ou <=, on pourrait supposer que < serait plus rapide car il comporte une seule étape ou une seule limite. Cependant, cette hypothèse est incorrecte. L'impact sur les performances est négligeable.
Génération de code machine
Sur la plupart des architectures, y compris x86, les comparaisons intégrales utilisent les instructions machine suivantes :
Les instructions de saut incluent jne (Sauter si non égal), jz (Sauter si zéro), jg (Sauter si plus grand) et d'autres.
Exemple de code
Considérez ce qui suit exemple :
if (a < b) { // Do something 1 }
et
if (a <= b) { // Do something 2 }
En comparant le code assembleur généré par un compilateur, nous constatons une différence entre les instructions de saut utilisées : jge versus jg.
if (a < b) mov eax, [a] cmp eax, [b] jge .L2 // Do something 1 if (a <= b) mov eax, [a] cmp eax, [b] jg .L5 // Do something 2
Par conséquent, la seule différence dans le code machine est l'instruction de saut, indiquant que la comparaison elle-même prend la même quantité de time.
Point flottant
Le même principe s'applique aux comparaisons à virgule flottante x87. Le compilateur génère le même nombre d'instructions pour < et <= comparaisons.
Conclusion
Malgré la différence dans le nombre d'opérateurs (< versus <=), la différence de performances dans les comparaisons intégrales est insignifiante sur la plupart des architectures. Les instructions de saut utilisées (jge et jg) prennent le même temps à s'exécuter. Il en va de même pour les comparaisons à virgule flottante.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!