免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
if-else和switch-case哪個效率更高?看這四張圖。

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

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

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

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

再看這張圖,我改動了case的條件,改成了幾個隨機數(shù):

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

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

可以看見,對應的匯編代碼是逐分支判斷。

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

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

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

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

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

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

打完收工。

版權(quán)申明:內(nèi)容來源網(wǎng)絡(luò),版權(quán)歸原創(chuàng)者所有。除非無法確認,我們都會標明作者及出處,如有侵權(quán)煩請告知,我們會立即刪除并表示歉意。謝謝!

本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
switch...case和if...else效率比較
if else 和 switch 的區(qū)別
JS運算符.pdf
8、WPS JS中的多重判斷語句
面試官:代碼中出現(xiàn)大量的if/else,需要優(yōu)化,你有什么好方案?
如何快速查看將C反匯編的代碼
更多類似文章 >>
生活服務
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服