Endereço literal de string em unidades de tradução
Em C e C , os programadores costumam usar literais de string para vários propósitos. Surge uma pergunta comum: é confiável assumir que a mesma string literal em diferentes unidades de tradução terá o mesmo endereço de memória?
Padrão C/C
O C99 e os projetos de normas C deixam especificamente este tópico sem especificação. A seção 6.4.5 do projeto de padrão C99 afirma que "Não é especificado se essas matrizes [literais de string] são distintas, desde que seus elementos tenham os valores apropriados." Isso significa que o compilador é livre para decidir se agrupa literais de string ou não.
Implementações do compilador
Na prática, compiladores diferentes têm comportamentos diferentes em relação ao pooling de literais de string.
Conclusão
O endereço de memória de um string literal é um detalhe de implementação e não pode ser confiável para permanecer consistente entre unidades de tradução. É importante estar ciente deste fato e escrever um código que seja independente de tais detalhes de implementação.Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3