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!