Est-ce que

Linda Hamilton
Linda Hamiltonoriginal
2024-12-22 18:29:14189parcourir

Is `

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 :

  • Une instruction test ou cmp qui modifie le registre EFLAGS
  • Une instruction de saut (Jcc) basée sur la comparaison tapez

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn