1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        if-else和switch-case哪個(gè)效率更高?看這四張圖。

        共 904字,需瀏覽 2分鐘

         ·

        2021-11-09 02:23

        大家平時(shí)編碼過程中肯定會(huì)有些疑問,if-else和switch-case都可用于條件判斷,那這兩種方式誰效率更高?



        這里從匯編角度和大家一起分析一下。我查看匯編代碼使用的是https://godbolt.org/這個(gè)網(wǎng)站,這個(gè)網(wǎng)站相當(dāng)好用,里面集成了幾十種編譯器,推薦給大家!


        首先看下switch-case,即下面這張圖,左半部分是C代碼,右半部分是對應(yīng)的匯編代碼,編譯選項(xiàng)是O3,即我們在實(shí)際項(xiàng)目中經(jīng)常使用的優(yōu)化選項(xiàng)。



        從圖中可以看到,switch-case生成的匯編代碼是使用的表結(jié)構(gòu),根據(jù)case里的1、2、3、4來拿到表結(jié)構(gòu)的偏移量,進(jìn)而拿到對應(yīng)的值。這種使用表結(jié)構(gòu)的switch-case效率很高,但是有個(gè)問題,該switch-case使用表結(jié)構(gòu)可能是因?yàn)閏ase里的常量數(shù)字比較小,且連續(xù),那如果是不連續(xù)的呢,假如有1、2、3、456、987,那還使用表結(jié)構(gòu)豈不是非常浪費(fèi)內(nèi)存。


        再看這張圖,我改動(dòng)了case的條件,改成了幾個(gè)隨機(jī)數(shù):



        再看對應(yīng)的匯編代碼,完完全全變成了逐分支判斷,效率肯定比表結(jié)構(gòu)方式更低。

        繼續(xù)探究if-else的效率問題,首先看下條件是順序數(shù)字的情況,即1、2、3、4,如圖:



        可以看見,對應(yīng)的匯編代碼是逐分支判斷。

        再看條件是非連續(xù)隨機(jī)數(shù)字的情況,如下圖:



        對應(yīng)的匯編代碼依舊是逐分支判斷,這里可知,if-else可不管條件里面的數(shù)字是否連續(xù),它就是不停的分支判斷,沒有任何優(yōu)化。

        通過這四張圖,大家應(yīng)該已經(jīng)對此問題有結(jié)論了吧?我總結(jié)一下:


        • 只有在case中的條件是連續(xù)數(shù)字或相隔不大時(shí),編譯器會(huì)使用表結(jié)構(gòu)做優(yōu)化,性能優(yōu)于if-else。

        • 其他情況下,switch-case其實(shí)就是逐個(gè)分支判斷,性能與if-else無異。

        • switch-case中的case只能是常量,而if-else用途更廣一些,本文僅討論分支是常量的情況。

        --- EOF ---


        瀏覽 36
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            91蜜桃传媒精品久久久一二三区 | 色五月大香蕉 | 精品人妻二区三区蜜桃 | 91精品人妻无码 | 女人自慰免费观看网站 | 色欲插插 | 国产精品色欲AV久久水 | 激情做爱网站 | 成人无码做爰毛片国产 | 超碰在线操 |