Maison >développement back-end >C++ >Les compilateurs peuvent-ils optimiser les « nouveaux » appels en 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 :
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
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!