Go Analog pour Memset
Question :
Les programmeurs Go recherchent une méthode efficace analogue à Le memset de C pour initialiser des tableaux avec des valeurs non nulles, comme les boucles de base peuvent l'être lent.
Réponse :
Bien que Go ne dispose pas d'une fonction memset explicite, il existe des approches optimisées qui émulent sa fonctionnalité.
Boucle- Solution basée :
L'alternative la plus simple est une boucle qui parcourt le tableau, attribuant le valeur souhaitée pour chaque élément :
func memsetLoop(a []int, v int) { for i := range a { a[i] = v } }
Solution basée sur la copie :
La fonction copy() optimisée de Go peut être exploitée pour initialiser rapidement les tableaux. En définissant manuellement le premier élément et en copiant à plusieurs reprises la partie remplie, le nombre d'itérations est réduit à log(n):
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]) } }
Comparaison des performances :
Pour petits tableaux, la solution basée sur la boucle est légèrement plus rapide. Cependant, à mesure que la taille du tableau augmente, la solution basée sur la copie devient nettement plus rapide en raison de son nombre réduit d'itérations.
Résultats de référence :
Array Size | Loop-Based | Copy-Based |
---|---|---|
100 elements | 1.15x slower | |
1,000 elements | 2.5x slower | |
10,000 elements | 2x slower | |
100,000 elements | 1.5x slower |
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!