'some'
MSVC에서 생성 한 어셈블러 코드에서 두 개의 리터럴을 볼 수 있지만 clang과 gcc가있는 것은 하나뿐입니다. 이로 인해 코드 실행 결과가 완전히 다릅니다.
static const char *A = "some";
static const char *B = "some";
void f() {
if (A == B) {
throw "Hello, string merging!";
}
}
누구든지 이러한 컴파일 출력의 차이점과 유사점을 설명 할 수 있습니까? 최적화가 요청되지 않았는데도 clang / gcc가 무언가를 최적화하는 이유는 무엇입니까? 이것은 일종의 정의되지 않은 동작입니까?
또한 선언을 아래 표시된 것으로 변경하면 clang / gcc / msvc가 "some"
어셈블러 코드에 전혀 남기지 않는다는 것을 알 수 있습니다. 행동이 다른 이유는 무엇입니까?
static const char A[] = "some";
static const char B[] = "some";