Existe-t-il un équivalent de memset en Go ?
En C , la fonction memset permet l'initialisation efficace de tableaux avec des valeurs spécifiques. En Go, bien qu'il n'y ait pas d'équivalent direct, plusieurs techniques peuvent obtenir des résultats similaires.
Itération de boucle
L'approche la plus simple consiste à utiliser une boucle pour définir chaque élément de un tableau à la valeur souhaitée.
func memsetLoop(a []int, v int) { for i := range a { a[i] = v } }
Répété copy()
En profitant de la fonction copy() hautement optimisée, nous pouvons exploiter un modèle de copie répétée pour définir efficacement les valeurs du tableau.
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]) } }
Résultats de l'analyse comparative
Pour évaluer les performances de ces techniques, nous les comparons les unes aux autres pour différents tableaux tailles.
var a = make([]int, 1000) // Size will vary func BenchmarkLoop(b *testing.B) { for i := 0; i < b.N; i++ { memsetLoop(a, 10) } } func BenchmarkRepeat(b *testing.B) { for i := 0; i < b.N; i++ { memsetRepeat(a, 11) } }
Les résultats montrent que memsetRepeat() surpasse memsetLoop() pour les tableaux plus grands, démontrant son efficacité pour une initialisation rapide.
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!