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.
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.
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.
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.
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!