การดำเนินการตามตารางต่อไปนี้จะสร้างชุดของคำสั่ง cmp / je อย่างที่ฉันคาดหวังว่าจะถูกล่ามโซ่หากข้อความ:
int square(int num) {
    if (num == 0){
        return 0;
    } else if (num == 1){
        return 1;
    } else if (num == 2){
        return 4;
    } else if (num == 3){
        return 9;
    } else if (num == 4){
        return 16;
    } else if (num == 5){
        return 25;
    } else if (num == 6){
        return 36;
    } else if (num == 7){
        return 49;
    } else {
        return num * num;
    }
}
และต่อไปนี้สร้างตารางข้อมูลสำหรับการส่งคืน:
int square_2(int num) {
    switch (num){
        case 0: return 0;
        case 1: return 1;
        case 2: return 4;
        case 3: return 9;
        case 4: return 16;
        case 5: return 25;
        case 6: return 36;
        case 7: return 49;
        default: return num * num;
    }
}
เหตุใด gcc จึงไม่สามารถปรับค่าตัวแรกให้อยู่ในอันดับต้น ๆ
ถอดแยกชิ้นส่วนเพื่อการอ้างอิง: https://godbolt.org/z/UP_igi
แก้ไข: น่าสนใจ MSVC สร้างตารางกระโดดแทนที่จะเป็นตารางข้อมูลสำหรับกรณีสวิทช์ และที่น่าประหลาดใจคือเสียงดังกราวให้มันได้ผลดีที่สุด
returns; กรณีที่ไม่มีbreaksดังนั้นสวิตช์ยังมีคำสั่งเฉพาะของการดำเนินการ ห่วงโซ่ if / else มีผลตอบแทนในทุกสาขาความหมายในกรณีนี้เทียบเท่า การเพิ่มประสิทธิภาพไม่ได้เป็นไปไม่ได้ ในฐานะที่เป็นตัวอย่างICCไม่ได้เพิ่มประสิทธิภาพฟังก์ชั่นใด ๆ