Maison > développement back-end > Golang > Go Arrays vs. Slices : Pourquoi l'accès aux tranches locales est-il plus rapide que l'accès aux baies locales ?

Go Arrays vs. Slices : Pourquoi l'accès aux tranches locales est-il plus rapide que l'accès aux baies locales ?

DDD
Libérer: 2024-11-28 15:14:10
original
223 Les gens l'ont consulté

Go Arrays vs. Slices: Why is Local Slice Access Faster Than Local Array Access?

Array vs Slice : vitesse d'accès

Dans Go, une tranche et un tableau sont deux structures de données étroitement liées utilisées pour stocker des éléments de un type de données spécifique. Bien qu'ils partagent des similitudes, une différence clé réside dans leur vitesse d'accès, en particulier lorsque l'on compare les instances mondiales et locales.

Résultats de référence :

Pour évaluer la différence de performances, un le benchmark a été réalisé à l'aide des fonctions suivantes :

  • BenchmarkSliceGlobal :Accès aux éléments d'un slice.
  • BenchmarkArrayGlobal : Accède aux éléments d'un tableau global.
  • BenchmarkSliceLocal : Accède aux éléments d'une tranche locale.
  • BenchmarkArrayLocal : Accède aux éléments d'un local array.

Les résultats ont systématiquement montré une vitesse d'accès plus rapide pour les tableaux globaux que pour les tranches globales. Cependant, la tranche locale a largement surpassé le tableau local.

Explication :

Pour déterminer la raison de cet écart, l'assemblage amd64 des fonctions de référence du tableau local et de la tranche a été examiné.

  • Local Array : Charge l'adresse du tableau de la mémoire plusieurs fois, introduisant une surcharge à chaque accès.
  • Local Slice : Évite le chargement répétitif de la mémoire en calculant exclusivement sur les registres.

Cela suggère que le local slice bénéficie d'une utilisation efficace des registres, tandis que le tableau local entraîne une surcharge supplémentaire en chargeant constamment l'adresse du tableau.

De plus, la version du tableau invoque le fonction runtime.duffcopy, une longue routine d'assemblage, contrairement à la version slice. Cela contribue encore davantage à la disparité des performances.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal