Maison > développement back-end > Golang > Pourquoi les tranches Go locales sont-elles plus rapides que les tableaux locaux pour l'accès aux éléments ?

Pourquoi les tranches Go locales sont-elles plus rapides que les tableaux locaux pour l'accès aux éléments ?

Susan Sarandon
Libérer: 2024-12-16 02:26:20
original
204 Les gens l'ont consulté

Why Are Local Go Slices Faster Than Local Arrays for Element Access?

Array vs Slice : vitesse d'accès aux éléments

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
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal