>백엔드 개발 >C++ >동일한 내용을 가진 문자열 리터럴은 다른 번역 단위에서 동일한 주소를 갖도록 보장됩니까?

동일한 내용을 가진 문자열 리터럴은 다른 번역 단위에서 동일한 주소를 갖도록 보장됩니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-05 04:30:02944검색

Are String Literals with the Same Content Guaranteed to Have the Same Address in Different Translation Units?

번역 단위 간 문자열 리터럴 주소 일관성

질문:

가정하는 것이 신뢰할 수 있습니까? 동일한 내용을 가진 문자열 리터럴은 서로 다른 번역 단위(예: 서로 다른 소스 파일)에서 동일한 메모리 주소를 갖게 됩니까?

답변:

아니요, 문자열에 의존합니다. 번역 단위 전체에서 일관성을 유지하기 위한 리터럴 주소는 이식 가능하지 않으며 지정되지 않은 동작으로 간주됩니다.

C 및 C 표준에서는 동일한 내용을 가진 문자열 리터럴이 별개의 메모리 위치를 차지할지 여부가 구현에 따라 정의된다고 명시합니다. 이는 서로 다른 컴파일러 또는 런타임 환경이 문자열 리터럴을 다르게 처리하여 잠재적으로 다양한 메모리 주소를 할당할 수 있음을 의미합니다.

의미:

  • 동일한 내용을 가진 두 개의 문자열 리터럴은 번역 단위 전체에서 동일한 주소를 가지므로 일부 컴파일러나 플랫폼에서는 어설션이 실패할 수 있습니다.
  • 비교 또는 기타 작업을 위해 문자열 리터럴 주소에 의존하는 코드는 예측할 수 없는 동작을 나타낼 수 있습니다.

옵션:

동일한 번역 단위(예: 단일 소스 파일) 내에서 일관된 문자열 리터럴 주소가 필요한 경우 일부 컴파일러는 다음과 같은 옵션을 제공합니다.

  • GCC: -fmerge-constants는 문자열 리터럴을 포함한 동일한 상수를 병합합니다.
  • Visual Studio: /GF는 문자열 리터럴 풀링을 활성화합니다.

참고:

  • 번역 단위 간 문자열 리터럴 주소 일관성은 보장되지 않으며 이에 의존해서는 안 됩니다.
  • 단위 간 문자열 리터럴 일관성이 중요한 경우 다음을 고려하세요. 공유 헤더 파일을 사용하거나 번역 단위 간에 명시적으로 문자열 값을 전달합니다.

위 내용은 동일한 내용을 가진 문자열 리터럴은 다른 번역 단위에서 동일한 주소를 갖도록 보장됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.