Aller équivalent au memset de C
Question originale :
Y a-t-il une méthode dans Go, cela est analogue à la fonction memset de C, qui permet une initialisation efficace des tableaux avec des valeurs non nulles valeurs ?
Réponse :
Go ne propose pas d'équivalent direct à memset dans sa bibliothèque standard. Cependant, plusieurs approches peuvent obtenir des fonctionnalités similaires :
Solution basée sur une boucle :
func memsetLoop(a []int, v int) { for i := range a { a[i] = v } }
Cette boucle simple parcourt un tableau et attribue la valeur v à chaque élément.
Solution optimisée utilisant copy() :
Go's La fonction copy() est hautement optimisée et peut être utilisée à cette fin :
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 définit le premier élément manuellement, puis copie à plusieurs reprises la partie initialisée du tableau sur les éléments restants.
Comparaison des performances :
Les benchmarks montrent que la solution memsetRepeat surpasse l'approche basée sur des boucles pour les tableaux plus grands en raison de la fonction copy() optimisée.
Pour résumer, les programmeurs Go peuvent utiliser soit la solution basée sur des boucles pour plus de simplicité, soit la solution optimisée memsetRepeat pour améliorer les performances lors de l'initialisation de tableaux avec des valeurs non nulles.
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!