Lors de la croissance itérative d'une tranche, il est facile de comprendre pourquoi allouer la taille en premier (si elle est connue) est plus efficace que d'utiliser la fonction append, car cette dernière décidera à chaque itération d'augmenter ou non la taille. de la capacité des tranches. Mais je suis curieux de savoir si l'utilisation de la forme variadique supplémentaire est moins efficace que l'utilisation de la construction make/copy lors de la concaténation de deux grandes tranches de manière non itérative. Par exemple (en supposant que sl1 et sl2 sont de type []int)
sl = append(sl, sl2...)
Comparaison
nsl = make([]int, len(sl) + len(sl2)) i := copy(nsl, sl) copy(nsl[i], sl2) sl = nsl
J'aurais pensé que le premier formulaire (plus lisible) fonctionnerait toujours, car je m'attendais à ce qu'il n'y ait toujours qu'un changement de capacité (en fonction du nombre d'arguments de l'appel d'ajout). Ai-je raison de le penser ?
append
和 copy
Utilisez les mêmes primitives de copie sous-jacentes.
Si la tranche cible a une capacité suffisante, append
aucune mémoire ne sera allouée.
append
Le code est plus facile à lire.
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!