Maison >développement back-end >C++ >Les compilateurs peuvent-ils optimiser les « nouveaux » appels en C ?

Les compilateurs peuvent-ils optimiser les « nouveaux » appels en C ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-02 00:19:15711parcourir

Can Compilers Optimize Away `new` Calls in C  ?

Le compilateur peut-il éliminer les allocations de mémoire du tas ?

En C , l'opérateur new est utilisé pour allouer de la mémoire sur le tas. Les compilateurs peuvent optimiser le code, notamment en supprimant les instructions inutiles. Les compilateurs peuvent-ils éliminer les allocations de mémoire de tas effectuées à l'aide de new ?

Comportement du compilateur

La recherche indique que différents compilateurs gèrent les allocations de tas différemment :

  • g (5.2.0) et Visual Studio 2015 n'optimisent pas le nouveau appel.
  • clang (3.0) optimise le nouvel appel, même avec des indicateurs d'optimisation complets.

Validité de l'optimisation

La validité des optimisations du compilateur est un sujet de débat. Certains soutiennent que le compilateur n'est pas autorisé à optimiser les nouveaux appels car ils peuvent avoir un comportement observable (par exemple, lever une exception). D'autres soutiennent que l'optimisation des nouveaux appels est autorisée si le compilateur peut garantir qu'aucun comportement observable ne sera affecté.

Norme C 14

N3664 : Clarifier l'allocation de mémoire a clarifié la règles concernant les optimisations du compilateur et l’allocation de mémoire. Il permet aux compilateurs d'optimiser les allocations de mémoire dans certains scénarios. Cependant, la disposition a été critiquée car elle viole potentiellement la causalité.

Considérations supplémentaires

  • Ne pas lancer de nouveaux : Clang optimise également appels vers le nouvel opérateur qui ne lance pas.
  • Opérateur remplacé new : Les nouvelles implémentations d'opérateurs globaux personnalisés dans différentes unités de traduction pourraient affecter la validité des optimisations du compilateur liées aux allocations de tas.

Conclusion

Le compilateur La capacité à optimiser les allocations de mémoire tas est un problème complexe impliquant le comportement du compilateur, les normes de langage et les exceptions potentielles. Bien que certains compilateurs implémentent cette optimisation basée sur N3664, sa validité reste un sujet de discussion et dépend de circonstances particulières, notamment du standard C et de la présence d'allocateurs de mémoire personnalisés.

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