Maison > développement back-end > C++ > le corps du texte

Pourquoi les littéraux de chaîne dans les unités de traduction ont-ils des adresses mémoire différentes ?

Linda Hamilton
Libérer: 2024-11-04 19:08:01
original
413 Les gens l'ont consulté

Why Do String Literals Across Translation Units Have Different Memory Addresses?

Incompatibilité d'adresses littérales de chaîne entre les unités de traduction

En C et C, il est souvent supposé que les littéraux de chaîne dans différentes unités de traduction (fichiers objets créé lors de la compilation) auront la même adresse mémoire. Cependant, cette idée n'est pas portable entre les compilateurs et les implémentations.

Selon les projets de normes C99 et C, le comportement concernant les littéraux de chaîne identiques n'est explicitement pas spécifié. Cela signifie que le compilateur est libre de les regrouper, de les fusionner ou de créer des instances distinctes pour chaque référence.

Visual Studio autorise explicitement le regroupement de littéraux de chaîne via l'option du compilateur /GF, tandis que GCC le prend en charge avec les constantes -fmerge. drapeau. Cependant, les deux compilateurs utilisent cette fonctionnalité de manière conditionnelle, en fonction de la disponibilité d'un matériel spécifique ou de la prise en charge de l'éditeur de liens.

Ainsi, il n'est pas portable de s'appuyer sur la même adresse mémoire pour les littéraux de chaîne dans différentes unités de traduction. Même au sein d'une même unité de traduction, les optimisations du compilateur peuvent conduire à un comportement imprévisible lors du traitement des chaînes littérales.

Ce manque de standardisation découle de la nature diversifiée des implémentations C au moment du développement du langage. Étant donné que les systèmes basés sur ROM exigeaient que les littéraux de chaîne soient stockés dans une mémoire morte, il a été jugé peu pratique de garantir l'unicité et l'écriture des littéraux de chaîne.

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!