Saya dapat melihat dua 'some'
literal dalam kode assembler yang dihasilkan oleh MSVC, tetapi hanya satu dengan clang dan gcc. Ini mengarah pada hasil eksekusi kode yang sangat berbeda.
static const char *A = "some";
static const char *B = "some";
void f() {
if (A == B) {
throw "Hello, string merging!";
}
}
Adakah yang bisa menjelaskan perbedaan dan persamaan antara hasil kompilasi tersebut? Mengapa clang / gcc mengoptimalkan sesuatu meskipun tidak ada pengoptimalan yang diminta? Apakah ini semacam perilaku yang tidak terdefinisi?
Saya juga memperhatikan bahwa jika saya mengubah deklarasi seperti yang ditunjukkan di bawah ini, clang / gcc / msvc tidak meninggalkan "some"
kode assembler sama sekali. Mengapa perilakunya berbeda?
static const char A[] = "some";
static const char B[] = "some";