Littéraux de chaîne dans les unités de traduction : fiabilité des adresses mémoire identiques
Les littéraux de chaîne sont couramment utilisés dans les langages de programmation. Mais est-il fiable de s'appuyer sur la même chaîne littérale ayant la même adresse mémoire dans différentes unités de traduction ?
Portabilité de la cohérence des adresses mémoire
Selon le C99 et le C projets de normes, le comportement n'est pas spécifié si les chaînes littérales avec des valeurs identiques ont des adresses mémoire différentes. Cela signifie que différentes implémentations peuvent gérer cela différemment.
Bien que certains compilateurs et plates-formes puissent offrir des options de regroupement de littéraux de chaînes, telles que les -fmerge-constants de GCC, ce n'est pas une fonctionnalité garantie et peut varier selon les systèmes.
Fiabilité au sein d'une unité de traduction
Au sein de la même unité de traduction (c'est-à-dire un fichier source unique), les chaînes littérales sont généralement fusionnées et stockées dans un seul emplacement pour optimiser l'utilisation de la mémoire. . Cependant, ce comportement est spécifique à l'implémentation et ne peut pas être fiable pour la portabilité.
Exemple de code
Considérez l'exemple de code fourni :
// foo.c const char *x = "I'm a literal!"; // bar.c const char *y = "I'm a literal!"; // test.c extern const char *x; extern const char *y; assert(x == y);
Dans ce cas, l'assertion x == y échouera si le compilateur n'effectue pas de regroupement de chaînes littérales entre les unités de traduction ou si la plate-forme spécifique ne la prend pas en charge.
Conclusion
S'appuyer sur des chaînes littérales identiques ayant la même adresse mémoire dans toutes les unités de traduction n'est pas portable et peut conduire à un comportement imprévisible. Cependant, au sein d'une seule unité de traduction, les chaînes littérales sont généralement fusionnées à des fins d'optimisation. Il est important de consulter la documentation du compilateur pour comprendre le comportement spécifique dans chaque cas et d'utiliser les mesures appropriées si nécessaire.
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!