ฉันเห็น'some'
ตัวอักษรสองตัวในโค้ดแอสเซมเบลอร์ที่สร้างโดย MSVC แต่มีเพียงตัวเดียวที่มี clang และ gcc สิ่งนี้นำไปสู่ผลลัพธ์ของการเรียกใช้โค้ดที่แตกต่างกันโดยสิ้นเชิง
static const char *A = "some";
static const char *B = "some";
void f() {
if (A == B) {
throw "Hello, string merging!";
}
}
ใครสามารถอธิบายความแตกต่างและความคล้ายคลึงกันระหว่างผลลัพธ์การคอมไพล์เหล่านั้นได้บ้าง เหตุใด clang / gcc จึงเพิ่มประสิทธิภาพบางอย่างแม้ว่าจะไม่มีการร้องขอการปรับให้เหมาะสมก็ตาม นี่เป็นพฤติกรรมที่ไม่ได้กำหนดหรือไม่?
ฉันยังสังเกตเห็นว่าถ้าฉันเปลี่ยนการประกาศเป็นที่แสดงด้านล่าง clang / gcc / msvc จะไม่ทิ้ง"some"
รหัสแอสเซมเบลอร์เลย ทำไมพฤติกรรมถึงแตกต่างกัน?
static const char A[] = "some";
static const char B[] = "some";