3 回答

TA貢獻(xiàn)1835條經(jīng)驗(yàn) 獲得超7個(gè)贊
甲開關(guān)構(gòu)建體更容易地轉(zhuǎn)換成一個(gè)跳躍(或分支)表。當(dāng)案例標(biāo)簽靠在一起時(shí),這可使switch語句比if-else效率更高。這個(gè)想法是將一堆跳轉(zhuǎn)指令順序地放在內(nèi)存中,然后將其值添加到程序計(jì)數(shù)器中。這將一系列比較指令替換為加法運(yùn)算。
以下是一些極為簡(jiǎn)化的偽裝配件示例。首先,if-else版本:
// C version
if (1 == value)
function1();
else if (2 == value)
function2();
else if (3 == value)
function3();
// assembly version
compare value, 1
jump if zero label1
compare value, 2
jump if zero label2
compare value, 3
jump if zero label3
label1:
call function1
label2:
call function2
label3:
call function3
接下來是交換機(jī)版本:
// C version
switch (value) {
case 1: function1(); break;
case 2: function2(); break;
case 3: function3(); break;
}
// assembly version
add program_counter, value
call function1
call function2
call function3
您可以看到生成的匯編代碼更加緊湊。請(qǐng)注意,需要以某種方式轉(zhuǎn)換該值以處理除1、2和3以外的其他值。但是,這應(yīng)該可以說明該概念。

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超3個(gè)贊
我忽略了通常不重要的這種低級(jí)優(yōu)化類型,并且可能因編譯器而異。
我想說的主要區(qū)別是可讀性。if / else非常靈活,但是當(dāng)您看到一個(gè)開關(guān)時(shí),您立即知道所有測(cè)試都針對(duì)同一個(gè)表達(dá)式。

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊
為了表現(xiàn)力,switch / case語句允許您將多個(gè)案例組合在一起,例如:
case 1,2,3: do(this); break;
case 4,5,6: do(that); break;
為了提高性能,編譯器有時(shí)可以將switch語句優(yōu)化為跳轉(zhuǎn)表。
- 3 回答
- 0 關(guān)注
- 1093 瀏覽
添加回答
舉報(bào)