Maison  >  Article  >  développement back-end  >  Comment pouvez-vous ajouter des éléments à un wrapper de fonctions variadiques sans réallocation de mémoire ?

Comment pouvez-vous ajouter des éléments à un wrapper de fonctions variadiques sans réallocation de mémoire ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-03 05:45:30324parcourir

How Can You Append Items to a Variadic Function Wrapper Without Memory Reallocation?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn