Wrappers de fonctions variadiques : ajout d'éléments sans réallocation de mémoire
Les fonctions variadiques offrent un moyen pratique de transmettre un nombre arbitraire d'arguments à une fonction. Cependant, lors de l'encapsulation de fonctions variadiques, l'ajout d'éléments supplémentaires peut entraîner une allocation de mémoire. Cet article examine différentes approches pour éviter une allocation de mémoire inutile dans de tels wrappers.
Approches inefficaces
Tentative d'étendre la tranche variadique directement à l'aide de l'opérateur points de suspension "..." (Approche 1) peut entraîner des erreurs de type « trop d'arguments » ou des problèmes de non-concordance de type (approche 2).
L'approche 3 alloue une nouvelle tranche pour accueillir les éléments supplémentaires, ce qui peut être inefficace pour les opérations de journalisation ou de débogage fréquentes. .
Approche efficace
Une approche plus efficace consiste à utiliser la fonction append pour agrandir dynamiquement la tranche sans réallocation. La fonction append renvoie une nouvelle tranche avec les éléments supplémentaires ajoutés à la tranche existante.
<code class="go">func Debug(a ...interface{}) { if debug { fmt.Fprintln(out, append([]interface{}{prefix, sep}, a...)...) } }</code>
Cette ligne ajoute le préfixe et le séparateur à une tranche créée à partir des arguments variadiques d'origine (a) et transmet le tranche résultante dans fmt.Fprintln. En tirant parti de la fonction append, cette approche évite la réallocation de mémoire tout en satisfaisant les exigences de paramètres de la fonction variadique.
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!