c語(yǔ)言怎么實(shí)現(xiàn)switch反匯編

這篇文章主要介紹“c語(yǔ)言怎么實(shí)現(xiàn)switch反匯編”,在日常操作中,相信很多人在c語(yǔ)言怎么實(shí)現(xiàn)switch反匯編問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”c語(yǔ)言怎么實(shí)現(xiàn)switch反匯編”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

創(chuàng)新互聯(lián)公司為您提適合企業(yè)的網(wǎng)站設(shè)計(jì)?讓您的網(wǎng)站在搜索引擎具有高度排名,讓您的網(wǎng)站具備超強(qiáng)的網(wǎng)絡(luò)競(jìng)爭(zhēng)力!結(jié)合企業(yè)自身,進(jìn)行網(wǎng)站設(shè)計(jì)及把握,最后結(jié)合企業(yè)文化和具體宗旨等,才能創(chuàng)作出一份性化解決方案。從網(wǎng)站策劃到成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè), 我們的網(wǎng)頁(yè)設(shè)計(jì)師為您提供的解決方案。

在分支較多的時(shí)候,switch的效率比if高,在反匯編中我們即可看到效率高的原因

一、switch語(yǔ)句

1、在正向編碼時(shí),switch語(yǔ)句可以看做是if語(yǔ)句的簡(jiǎn)寫(xiě)

c語(yǔ)言怎么實(shí)現(xiàn)switch反匯編

2、break在switch語(yǔ)句的妙用

1、當(dāng)switch存在3個(gè)分支時(shí)

c語(yǔ)言怎么實(shí)現(xiàn)switch反匯編

當(dāng)去掉break的時(shí)候

c語(yǔ)言怎么實(shí)現(xiàn)switch反匯編

二、switch語(yǔ)句的反匯編

1、當(dāng)switch存在3個(gè)分支時(shí)

#include<stdio.h>

void Function(int x) {
	switch (x) {
		case 1:
			printf("1");

		case 2:
			printf("2");
		case 3:
			printf("3");
		default:
			printf("4");
	}
}
int main() {
	Function(2);
	return 0;
}

c語(yǔ)言怎么實(shí)現(xiàn)switch反匯編

可以看出,此時(shí)switch的反匯編代碼與if語(yǔ)句無(wú)異。
當(dāng)有四個(gè)if語(yǔ)句的時(shí)候就會(huì)生成大表。

c語(yǔ)言怎么實(shí)現(xiàn)switch反匯編

2、當(dāng)switch語(yǔ)句出現(xiàn)四個(gè)分支時(shí),編譯器會(huì)產(chǎn)生大表

步驟:

1、將傳進(jìn)來(lái)的數(shù)先減去1,再進(jìn)行比較。判斷出該參數(shù)是否超過(guò)switch語(yǔ)句中最大常量還,即判斷參數(shù)是直接進(jìn)入default中還是進(jìn)入case中

2、 若參數(shù)<=max,則用寄存器保留該值。并代入表達(dá)式中,通過(guò)大表直接跳到相應(yīng)的地址
注意

分支少于四個(gè),則switch無(wú)意義,編譯器會(huì)按if…else…語(yǔ)句進(jìn)行反匯編
case后的常量的順序不影響大表的生成

將常量值的順序打亂,觀察反匯編代碼

正向代碼

c語(yǔ)言怎么實(shí)現(xiàn)switch反匯編

匯編代碼

c語(yǔ)言怎么實(shí)現(xiàn)switch反匯編

這里可以看到大表里面都是自己排好序了。

將連續(xù)的10項(xiàng)中抹去1項(xiàng)或者2項(xiàng),觀察反匯編有無(wú)變化

正向代碼是這樣的

c語(yǔ)言怎么實(shí)現(xiàn)switch反匯編

這里可以看到有幾個(gè)地址是一樣的

c語(yǔ)言怎么實(shí)現(xiàn)switch反匯編

可以發(fā)現(xiàn)是指向默認(rèn)的地址。

c語(yǔ)言怎么實(shí)現(xiàn)switch反匯編

3、當(dāng)switch存在多個(gè)分支,常量連續(xù)性相對(duì)不高時(shí)

c語(yǔ)言怎么實(shí)現(xiàn)switch反匯編

就會(huì)生成小表

c語(yǔ)言怎么實(shí)現(xiàn)switch反匯編

步驟:

1、將傳進(jìn)來(lái)的參數(shù)減去最小值,然后跟最大值相比,如果大于的話就跳到默認(rèn)的地方,不然就用差值去查小表,然后查大表。

補(bǔ)充:當(dāng)case后的常量差距較大時(shí)

編譯器按照if…else…進(jìn)行反匯編

到此,關(guān)于“c語(yǔ)言怎么實(shí)現(xiàn)switch反匯編”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

當(dāng)前名稱(chēng):c語(yǔ)言怎么實(shí)現(xiàn)switch反匯編
分享路徑:http://www.muchs.cn/article8/jsodop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)網(wǎng)站設(shè)計(jì)公司網(wǎng)站內(nèi)鏈、網(wǎng)站建設(shè)商城網(wǎng)站、定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司