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.
Une implémentation simple utilisant une boucle est :
func memsetLoop(a []int, v int) { for i := range a { a[i] = v } }
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]) } }
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é.
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.
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!