Question :
Malgré les attentes selon lesquelles les tableaux seraient plus rapides que les tranches en raison de En raison de leur nature contiguë, des tests empiriques révèlent que les tranches locales sont nettement plus rapides que les tableaux locaux lors de l'accès à leurs éléments. Pourquoi est-ce le cas ?
Contexte :
Un test de référence a été effectué pour comparer les performances d'accès aux éléments de tableau et de tranche, y compris les variantes globales et locales. Étonnamment, la tranche locale est apparue comme l'option la plus rapide.
Réponse :
Un examen de l'assemblage amd64 du tableau local et des benchmarks slice révèle un coupable potentiel. Bien que les deux méthodes emploient des opérations similaires, la version tableau charge à plusieurs reprises l'adresse du tableau depuis la mémoire lors de chaque accès :
LEAQ "".a+1000(SP),BX
En revanche, la version slice fonctionne principalement sur les registres, n'effectuant qu'un seul chargement initial depuis la mémoire :
LEAQ (DX)(SI*1),BX
De plus, la version tableau appelle la routine d'assemblage runtime.duffcopy, contrairement à la version tranche. Cet appel d'exécution supplémentaire peut contribuer au ralentissement des performances de la version du tableau.
Remarques supplémentaires :
L'écart de performances observé persiste quelles que soient les variations de taille du tableau/tranche, type d'élément et ordre d'exécution du benchmark.
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!