日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

switch最大选项数目_随时随地学习C语言之3—if和switch哪个效率高?

發(fā)布時間:2023/12/15 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 switch最大选项数目_随时随地学习C语言之3—if和switch哪个效率高? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

之前學習C語言的時候,我經(jīng)常有一個疑問,既然有if-else if-else結構的多分支選擇語句,C語言為何還要制定switch這種多分支選擇語句呢?直到兩年前在分析ARM平臺C語言反匯編代碼的時候,才終于明白了switch-case這種結構存在的意義及價值。一句話來說,就是switch結構產生的機器代碼更為精簡、CPU執(zhí)行起來更加高效。switch結構相對于if-else結構的執(zhí)行效率,選擇選項越多,領先越明顯。今天,我們分析下ARM平臺下(抱歉,我也只會ARM匯編),if-else結構和switch-case結構的差異和差距。
首先,下面兩圖是分別用if-else和switch-case結構編寫的功能相同的兩段代碼:


if-else 結構測試代碼


switch-case 結構測試代碼
具體執(zhí)行功能為:傳入for循環(huán)次數(shù)、要判斷的值,代碼分別根據(jù)傳入值進入相應代碼塊,然后繼續(xù)循環(huán),不做其他操作(其實上面代碼可以進行優(yōu)化,為了介紹方便,不做優(yōu)化)。上述兩段代碼分別執(zhí)行完成后看下程序的執(zhí)行時間。首先上一下我電腦的配置圖:


然后首先分別判斷輸入值為5,兩段代碼分別運行1億次執(zhí)行時間分別如下:


這里大家只看時間值得user那行(第二行),看出差距來了吧,if結構耗費的時間是switch結構的3倍!下面我們再判斷值9,分別運行1億次看下結果:


差距很明顯,if結構對值9(if結構中排列靠后的值)比對值5(if結構中排列較前的值)判斷時間明顯長很多,而switch結構對數(shù)值在代碼中的排列前后順序似乎不是特別明顯,if結構相對于switch結構的差距更大了!是什么原因造成的這種結果呢?下面我們在arm平臺下,看下if結構和switch結構產生的反匯編代碼是什么樣子的?
我們通過下述命令(有關linux的命令,本號后續(xù)會推出《手把手教你學linux》系列,敬請關注),生成反匯編文件:


看下if結構和swtich結構生成的for循環(huán)匯編代碼段是什么樣子的:
if結構:


if-else 結構反匯編結果
switch結構:


switch-case 結構反匯編結果
注意我標<<<<的幾行,if結構的反匯編代碼很長,在這里只截取了判斷值0~3的一段,標<<<<的代碼表示真正進行數(shù)值判斷的匯編代碼,可以看到:if結構的匯編代碼(也就是機器所做的動作)是將接收到的實參值與程序當中的值(按值在代碼中的排列順序)挨個進行比較,這就是說,如果要比較的是9,if結構就需要比較10次才會命中。反過來看下switch結構,switch結構很巧妙的運用了“跳轉”的思想,對任何一個case值的判斷,和值在代碼中的排列順序無關,都會直接“跳轉”到符合條件的case塊中,所以,執(zhí)行速度比if結構快得多,而且與值在代碼中的排列順序無關!反匯編代碼可以看出,switch結構不僅比if結構執(zhí)行效率高,占用空間也少!看圖:


相信看了上面的介紹,你對if結構和switch結構的優(yōu)劣性有自己的選擇了吧。實際應用當中,我一般遵循以下編碼“潛規(guī)則”:
1.凡是判斷層級達到4層以上的,用switch結構。
2.凡是可能性最大的選項,放在if結構的最頂端。這個思想,也是ARM公司在ARM處理器多級流水線中加入“分支預測”功能的考量之一。
好啦,經(jīng)過本文的介紹,if結構和switch結構的效率(執(zhí)行效率、空間效率)你懂了吧~

最后

創(chuàng)一個小群,供大家學習交流聊天

如果有對學C++方面有什么疑惑問題的,或者有什么想說的想聊的大家可以一起交流學習一起進步呀。

我偶爾也會直播給大家手把手編程

也希望大家對學C++能夠持之以恒

如果你想要學好C++最好加入一個組織,這樣大家學習的話就比較方便,還能夠共同交流和分享資料,給你推薦一個學習的組織:大牛小白C++組織 可以點擊編程二字,可以直達

對編程感興趣的朋友歡迎入住!!!

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結

以上是生活随笔為你收集整理的switch最大选项数目_随时随地学习C语言之3—if和switch哪个效率高?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。