La comparaison est-elle '<' Plus rapide que '<=' ?
Dans certains scénarios impliquant du code de boucle complexe, il a été suggéré que le '<' L'opérateur peut être plus rapide que l'opérateur '<='. Pour enquêter sur cette affirmation, examinons le code machine sous-jacent généré pour ces comparaisons.
Génération de code
Sur les architectures x86, les comparaisons intégrales sont généralement implémentées à l'aide de deux instructions machine :
Pour les deux '<' et '<=', la première instruction (un cmp) est identique. La différence réside dans la deuxième instruction :
Temps d'exécution
Le temps d'exécution est déterminé à la fois par la latence et débit. Dans le cas des instructions jge et jg, elles ont la même latence de zéro cycle et un débit de 0,5 cycle. Cela signifie qu'ils prendront le même temps à s'exécuter.
Comparaisons à virgule flottante
Les mêmes principes s'appliquent aux comparaisons à virgule flottante x87 à l'aide de l'instruction fucomip. Les instructions seta et setae utilisées pour vérifier le registre EFLAGS prennent également le même temps à s'exécuter.
Conclusion
Sur la plupart des architectures, le '<' et '<=' ont des temps d'exécution identiques pour les comparaisons intégrales et à virgule flottante. L'hypothèse selon laquelle '<' pourrait être plus rapide est incorrect dans le cas général.
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!