Ich kann zwei 'some'
Literale im Assembler-Code sehen, der von MSVC generiert wurde, aber nur eines mit clang und gcc. Dies führt zu völlig unterschiedlichen Ergebnissen der Codeausführung.
static const char *A = "some";
static const char *B = "some";
void f() {
if (A == B) {
throw "Hello, string merging!";
}
}
Kann jemand den Unterschied und die Ähnlichkeiten zwischen diesen Kompilierungsausgaben erklären? Warum optimiert clang / gcc etwas, auch wenn keine Optimierungen angefordert werden? Ist das eine Art undefiniertes Verhalten?
Ich stelle auch fest, dass clang / gcc / msvc, wenn ich die Deklarationen in die unten gezeigten ändere, überhaupt keine "some"
im Assembler-Code belässt . Warum ist das Verhalten anders?
static const char A[] = "some";
static const char B[] = "some";