'some'
MSVC tarafından oluşturulan assembler kodunda iki değişmezi görebiliyorum , ancak sadece bir tanesi clang ve gcc ile. Bu, kod yürütmenin tamamen farklı sonuçlarına yol açar.
static const char *A = "some";
static const char *B = "some";
void f() {
if (A == B) {
throw "Hello, string merging!";
}
}
Bu derleme çıktıları arasındaki farkı ve benzerlikleri açıklayan var mı? Optimizasyon talep edilmediğinde bile clang / gcc bir şeyi neden optimize ediyor? Bu bir tür tanımlanmamış davranış mı?
Ayrıca, bildirimleri aşağıda gösterilenlerle değiştirirsem, clang / gcc / msvc'nin "some"
assembler kodunda hiç bırakmadığını da fark ettim . Davranış neden farklı?
static const char A[] = "some";
static const char B[] = "some";