Adresse littérale de chaîne dans les unités de traduction
En C et C , les programmeurs utilisent souvent des littéraux de chaîne à diverses fins. Une question courante se pose : est-il fiable de supposer que la même chaîne littérale dans différentes unités de traduction aura la même adresse mémoire ?
Norme C/C
Le C99 et les projets de normes C laissent spécifiquement ce sujet non spécifié. La section 6.4.5 du projet de norme C99 stipule qu'« il n'est pas précisé si ces tableaux [littéraux de chaîne] sont distincts à condition que leurs éléments aient les valeurs appropriées ». Cela signifie que le compilateur est libre de décider de regrouper ou non les littéraux de chaîne.
Implémentations du compilateur
En pratique, différents compilateurs ont des comportements différents concernant le regroupement de littéraux de chaîne.
Raison d'être de Absence d'exigence
La raison pour ne pas exiger que les littéraux de chaîne soient regroupés dans la norme C est due à la diversité des compilateurs et des environnements d'exécution à l'époque. Certaines implémentations stockaient les chaînes littérales dans la ROM, tandis que d'autres les stockaient dans des sections de données inscriptibles. Pour garantir la portabilité, il a été jugé préférable de n'imposer aucun comportement spécifique.
Considérations pratiques
En général, il n'est pas portable de s'appuyer sur des chaînes littérales ayant le même adresse mémoire à travers les unités de traduction. Cependant, au sein d'une même unité de traduction, le comportement est plus susceptible d'être cohérent, car le compilateur a plus de contrôle sur les optimisations.
Conclusion
L'adresse mémoire d'un le littéral de chaîne est un détail d’implémentation et on ne peut pas compter sur sa cohérence entre les unités de traduction. Il est important d'être conscient de ce fait et d'écrire du code indépendant de ces détails d'implémentation.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3