Maison > développement back-end > C++ > Quelle quantité de mémoire devez-vous pré-allouer pour le placement du tableau en C ?

Quelle quantité de mémoire devez-vous pré-allouer pour le placement du tableau en C ?

Patricia Arquette
Libérer: 2024-12-21 13:34:13
original
759 Les gens l'ont consulté

How Much Memory Should You Pre-allocate for Array Placement-new in C  ?

Array Placement-New : gestion des frais généraux dans l'allocation de tampon

La norme C 11 permet l'allocation de tableaux en utilisant le placement-new, où la mémoire l'emplacement est spécifié manuellement. Cependant, une valeur de surcharge non spécifiée, notée x et y, peut être ajoutée à la taille du tampon lors de l'allocation. Cela soulève la question de savoir comment déterminer la quantité de mémoire à pré-allouer lors de l'utilisation de array placement-new.

L'exemple standard fourni en 5.3.4 [expr.new] illustre ce new(buffer) std : :string[10] appellera en interne l'opérateur new[](sizeof(std::string) * 10 y, buffer). Cela implique que la valeur de surcharge y, si elle est différente de zéro, pourrait conduire à un tampon pré-alloué trop petit.

Amendement : élimination des frais généraux pour les fonctions de placement standard

Récemment, un correctif a été introduit (rapport de défaut en novembre 2019) qui élimine la surcharge non spécifiée y lors de l'utilisation de l'opérateur de fonction de placement standard nouveau[](std::size_t, void* p). Cela signifie que la surcharge est systématiquement nulle pour cette fonction de placement particulière.

Implications pour les fonctions de placement personnalisées

Bien que la surcharge ait été supprimée pour la fonction de placement standard, elle reste un problème potentiel lors de l’utilisation des fonctions de placement personnalisé. Dans de tels cas, il est essentiel de ne pas se fier à une valeur de frais généraux spécifique. Au lieu de cela, il est recommandé d'implémenter une nouvelle fonction de tableau de placement personnalisé qui peut déterminer dynamiquement la surcharge au moment de l'exécution.

En examinant la valeur de n dans une nouvelle fonction de tableau de placement personnalisé et en la comparant à la limite de tampon spécifiée, on peut déduire la surcharge pour une plate-forme spécifique et ajuster l'allocation de tampon en conséquence.

Conclusion

Lorsque vous travaillez avec le placement de tableau-nouveau, il est crucial d'être conscient de la surcharge potentielle associée aux fonctions de placement personnalisé. La mise en œuvre d'une nouvelle fonction de tableau de placement personnalisé capable de détecter la surcharge au moment de l'exécution garantit que la quantité correcte de mémoire est allouée et évite les échecs d'allocation potentiels.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal