Puedo ver dos 'some'
literales en el código ensamblador generado por MSVC, pero solo uno con clang y gcc. Esto conduce a resultados totalmente diferentes de ejecución de código.
static const char *A = "some";
static const char *B = "some";
void f() {
if (A == B) {
throw "Hello, string merging!";
}
}
¿Alguien puede explicar la diferencia y las similitudes entre esos resultados de compilación? ¿Por qué clang / gcc optimiza algo incluso cuando no se solicitan optimizaciones? ¿Es este algún tipo de comportamiento indefinido?
También noto que si cambio las declaraciones a las que se muestran a continuación, clang / gcc / msvc no deja ninguna "some"
en el código ensamblador. ¿Por qué el comportamiento es diferente?
static const char A[] = "some";
static const char B[] = "some";