Riesco a vedere due 'some'
letterali nel codice assembler generato da MSVC, ma solo uno con clang e gcc. Ciò porta a risultati completamente diversi dell'esecuzione del codice.
static const char *A = "some";
static const char *B = "some";
void f() {
if (A == B) {
throw "Hello, string merging!";
}
}
Qualcuno può spiegare la differenza e le somiglianze tra questi output della compilation? Perché clang / gcc ottimizza qualcosa anche quando non sono richieste ottimizzazioni? È una specie di comportamento indefinito?
Noto anche che se cambio le dichiarazioni in quelle mostrate di seguito, clang / gcc / msvc non ne lascia affatto "some"
nel codice assembler. Perché il comportamento è diverso?
static const char A[] = "some";
static const char B[] = "some";