Maison > développement back-end > Golang > Comment initialiser efficacement des tableaux dans Go : alternatives memset ?

Comment initialiser efficacement des tableaux dans Go : alternatives memset ?

Barbara Streisand
Libérer: 2024-12-31 05:00:12
original
961 Les gens l'ont consulté

How to Efficiently Initialize Arrays in Go: memset Alternatives?

Analogue de memset en Go

En C , la fonction memset initialise efficacement un tableau avec une valeur spécifiée. Go, cependant, ne prend pas en charge directement les memset. Cet article explore plusieurs approches alternatives pour obtenir des fonctionnalités similaires.

Solution de boucle itérative

Une implémentation simple utilisant une boucle est :

func memsetLoop(a []int, v int) {
    for i := range a {
        a[i] = v
    }
}
Copier après la connexion

Solution basée sur la copie

Une approche optimisée exploite la fonction efficace copy() :

func memsetRepeat(a []int, v int) {
    if len(a) == 0 {
        return
    }
    a[0] = v
    for bp := 1; bp < len(a); bp *= 2 {
        copy(a[bp:], a[:bp])
    }
}
Copier après la connexion

Cette solution ressemble à la mise en œuvre de octets.Repeat(). Pour créer un nouveau []byte rempli avec la même valeur, bytes.Repeat() est recommandé.

Comparaison des benchmarks

Les benchmarks de performances révèlent la supériorité de memsetRepeat() sur memsetLoop() en tant que la taille du tableau augmente :

Array Size memsetLoop memsetRepeat Improvement
100 ~1.15x slower ~1.15x faster
1,000 ~2.5x slower ~2.5x faster
10,000 ~2x slower ~2x faster
100,000 ~1.5x slower ~1.5x faster

À environ 3 800-4 000 éléments, memsetRepeat() offre une amélioration significative des performances d'environ 3,2x.

Conclusion

Bien que memset ne soit pas pris en charge nativement dans Go, memsetLoop() et memsetRepeat() fournissent des alternatives efficaces pour initialiser des tableaux avec des valeurs non nulles. memsetRepeat(), utilisant copy(), apparaît comme la solution optimale pour les tableaux plus grands.

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