第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如果與開關(guān)速度

如果與開關(guān)速度

紫衣仙女 2019-10-08 15:21:06
由于編譯器的優(yōu)化,switch語句通常比等效的if-else-if語句(如本文中所述)要快。這種優(yōu)化實(shí)際上是如何工作的?有人有很好的解釋嗎?
查看完整描述

4 回答

?
森林海

TA貢獻(xiàn)2011條經(jīng)驗(yàn) 獲得超2個(gè)贊

這是一個(gè)略微的簡化,因?yàn)橥ǔH魏维F(xiàn)代編譯器遇到的if..else if ..序列都可能被人輕易地轉(zhuǎn)換為switch語句,編譯器也將如此。但是只是為了增加樂趣,編譯器不受語法的限制,因此可以在內(nèi)部生成“ switch”之類的語句,這些語句混合了范圍,單個(gè)目標(biāo)等,并且它們可以(也可以)對switch和if做到這一點(diǎn)。 .else語句。


順便說一句,Konrad答案的擴(kuò)展是編譯器可以生成一個(gè)跳轉(zhuǎn)表,但這不一定能保證(也不可?。?。出于各種原因,跳轉(zhuǎn)表對現(xiàn)代處理器上的分支預(yù)測器不利,而表本身對緩存行為不利。


switch(a) { case 0: ...; break; case 1: ...; break; }

如果編譯器為此實(shí)際生成了一個(gè)跳轉(zhuǎn)表,則if..else if..由于跳轉(zhuǎn)表使分支預(yù)測失敗,因此替代樣式代碼的運(yùn)行速度可能會(huì)更慢。


查看完整回答
反對 回復(fù) 2019-10-08
?
波斯汪

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超4個(gè)贊

Switch / case語句通常可以更快地達(dá)到1級深度,但是當(dāng)您開始使用2級或2級以上語句時(shí),switch / case語句的開始時(shí)間是嵌套if / else語句的2-3倍。


本文有一些速度比較,突出顯示了嵌套此類語句時(shí)的速度差異。


例如,根據(jù)他們的測試,示例代碼如下:


if (x % 3 == 0)

            if (y % 3 == 0)

                total += 3;

            else if (y % 3 == 1)

                total += 2;

            else if (y % 3 == 2)

                total += 1;

            else

                total += 0;

        else if (x % 3 == 1)

            if (y % 3 == 0)

                total += 3;

            else if (y % 3 == 1)

                total += 2;

            else if (y % 3 == 2)

                total += 1;

            else

                total += 0;

        else if (x % 3 == 2)

            if (y % 3 == 0)

                total += 3;

            else if (y % 3 == 1)

                total += 2;

            else if (y % 3 == 2)

                total += 1;

            else

                total += 0;

        else

            if (y % 3 == 0)

                total += 3;

            else if (y % 3 == 1)

                total += 2;

            else if (y % 3 == 2)

                total += 1;

            else

                total += 0;

在等效的switch / case語句運(yùn)行一半的時(shí)間內(nèi)完成了:


switch (x % 3)

    {

        case 0:

            switch (y % 3)

            {

                case 0: total += 3;

                    break;

                case 1: total += 2;

                    break;

                case 2: total += 1;

                    break;

                default: total += 0;

                    break;

            }

            break;

        case 1:

            switch (y % 3)

            {

                case 0: total += 3;

                    break;

                case 1: total += 2;

                    break;

                case 2: total += 1;

                    break;

                default: total += 0;

                    break;

            }

            break;

    case 2:

            switch (y % 3)

            {

                case 0: total += 3;

                    break;

                case 1: total += 2;

                    break;

                case 2: total += 1;

                    break;

                default: total += 0;

                    break;

            }

            break;

    default:

        switch (y % 3)

        {

            case 0: total += 3;

                break;

            case 1: total += 2;

                break;

            case 2: total += 1;

                break;

            default: total += 0;

                break;

        }

        break;

    }

是的,這是一個(gè)基本的例子,但它說明了這一點(diǎn)。


因此,對于僅深一層的簡單類型,可能會(huì)使用switch / case來得出結(jié)論,但對于更復(fù)雜的比較和多個(gè)嵌套的層,則使用經(jīng)典的if / else構(gòu)造?


查看完整回答
反對 回復(fù) 2019-10-08
?
MM們

TA貢獻(xiàn)1886條經(jīng)驗(yàn) 獲得超2個(gè)贊

不匹配的統(tǒng)計(jì)信息可能不好。

如果您實(shí)際下載源,則在if和switch情況下,不匹配值都已知為21。編譯器應(yīng)該能夠抽象出來,知道應(yīng)該始終運(yùn)行哪個(gè)語句,并且CPU應(yīng)該能夠正確分支預(yù)測。

在我看來,更有趣的情況是并非所有情況都中斷了,但是這可能不是實(shí)驗(yàn)的范圍。


查看完整回答
反對 回復(fù) 2019-10-08
  • 4 回答
  • 0 關(guān)注
  • 730 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號