Maison > développement back-end > C++ > Les compilateurs C peuvent-ils optimiser les allocations de mémoire du tas en utilisant « new » ?

Les compilateurs C peuvent-ils optimiser les allocations de mémoire du tas en utilisant « new » ?

Patricia Arquette
Libérer: 2024-12-02 02:15:11
original
556 Les gens l'ont consulté

Can C   Compilers Optimize Out Heap Memory Allocations Using `new`?

Optimisation des allocations de mémoire du tas

En C , l'opérateur new est couramment utilisé pour allouer de la mémoire sur le tas. Cependant, la question se pose de savoir si le compilateur est autorisé à optimiser ces allocations de mémoire tas.

L'argument en faveur de l'optimisation

Selon N3664 : Clarifier l'allocation de mémoire, le compilateur est autorisé à optimiser autour de la mémoire allocations. Cette optimisation est basée sur la règle « comme si », qui stipule que les implémentations peuvent ignorer les exigences tant que le résultat apparaît comme si les exigences étaient satisfaites. Étant donné que new peut lever une exception, certains soutiennent qu'il ne peut pas être optimisé en raison de son comportement observable.

Contre-argument : la règle du "comme si"

Cependant, les partisans de l'optimisation soutiennent que le La règle du "comme si" s'applique même dans ce cas. Ils soutiennent que le compilateur peut déterminer que l'allocation ne provoquera pas d'exception et que supprimer le nouvel appel ne violerait pas la règle. De plus, il est avancé que le compilateur peut prouver qu'aucun opérateur global de remplacement new n'affecterait le comportement observable, lui permettant d'effectuer l'optimisation.

Variations et exceptions

Bien que la plupart des compilateurs n'optimisent pas nouveaux appels, quelques exceptions existent. Clang, par exemple, a implémenté l'optimisation qui est devenue plus tard une partie de C 14. Cependant, dans les cas où une version non lancée de new est utilisée ou lorsqu'un opérateur de remplacement new est possible, l'optimisation peut ne pas être effectuée.

Conclusion

La capacité du compilateur à optimiser les allocations de mémoire du tas est un problème complexe avec diverses interprétations de la règle "comme si". Alors que certaines implémentations permettent une telle optimisation sous certaines conditions, d'autres suivent strictement la norme et ne l'effectuent pas.

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