欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

c語言switch反匯編的實現(xiàn)

 更新時間:2021年06月15日 14:25:28   作者:multi4  
本文主要介紹了c語言switch反匯編,在分支較多的時候,switch的效率比if高,在反匯編中我們即可看到效率高的原因,感興趣的可以了解一下

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

一、switch語句

1、在正向編碼時,switch語句可以看做是if語句的簡寫

在這里插入圖片描述

2、break在switch語句的妙用

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

在這里插入圖片描述

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

在這里插入圖片描述

二、switch語句的反匯編

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

#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;
}

在這里插入圖片描述

可以看出,此時switch的反匯編代碼與if語句無異。
當(dāng)有四個if語句的時候就會生成大表。

在這里插入圖片描述

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

步驟:

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

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

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

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

正向代碼

在這里插入圖片描述

匯編代碼

在這里插入圖片描述

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

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

正向代碼是這樣的

在這里插入圖片描述

這里可以看到有幾個地址是一樣的

在這里插入圖片描述

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

在這里插入圖片描述

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

在這里插入圖片描述

就會生成小表

在這里插入圖片描述

步驟:

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

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

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

到此這篇關(guān)于c語言switch反匯編的實現(xiàn)的文章就介紹到這了,更多相關(guān)c語言switch反匯編內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言數(shù)組超詳細(xì)講解中篇三子棋

    C語言數(shù)組超詳細(xì)講解中篇三子棋

    數(shù)組是一組有序的數(shù)據(jù)的集合,本篇將帶你結(jié)合數(shù)組來實現(xiàn)三子棋小游戲,上手實練更快的能夠掌握數(shù)組使用,感興趣的朋友來看看吧
    2022-04-04
  • C語言計算余數(shù)的圖文步驟

    C語言計算余數(shù)的圖文步驟

    在本篇文章里小編給大家整理了一篇關(guān)于C語言計算余數(shù)的圖文步驟內(nèi)容,有需要的朋友們可以參考下。
    2020-02-02
  • Cocos2d-x Schedule定時器的使用實例

    Cocos2d-x Schedule定時器的使用實例

    這篇文章主要介紹了Cocos2d-x Schedule定時器的使用實例,本文的講解內(nèi)容包含在代碼注釋中,需要的朋友可以參考下
    2014-09-09
  • 溫故C語言內(nèi)存管理

    溫故C語言內(nèi)存管理

    這篇文章主要介紹了 C語言內(nèi)存管理的相關(guān)資料,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-05-05
  • C語言實現(xiàn)BMP圖像處理(直方圖均衡化)

    C語言實現(xiàn)BMP圖像處理(直方圖均衡化)

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)BMP圖像直方圖均衡化處理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • C/C++開發(fā)中extern的一些使用注意事項

    C/C++開發(fā)中extern的一些使用注意事項

    這篇文章主要為大家介紹了C/C++開發(fā)中extern一些使用注意事項的事例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • 通過“回文字算法”復(fù)習(xí)C++語言

    通過“回文字算法”復(fù)習(xí)C++語言

    這篇文章主要介紹了通過“回文字算法”復(fù)習(xí)C++語言的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-10-10
  • C++求解二叉樹的下一個結(jié)點問題

    C++求解二叉樹的下一個結(jié)點問題

    本文將通過C++求解以下問題:給定一個二叉樹其中的一個結(jié)點,請找出中序遍歷順序的下一個結(jié)點并且返回。文中示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-04-04
  • C++將txt文件內(nèi)容保存到數(shù)組的方法

    C++將txt文件內(nèi)容保存到數(shù)組的方法

    今天小編就為大家分享一篇C++將txt文件內(nèi)容保存到數(shù)組的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • C語言 fseek(f,0,SEEK_SET)函數(shù)案例詳解

    C語言 fseek(f,0,SEEK_SET)函數(shù)案例詳解

    這篇文章主要介紹了C語言 fseek(f,0,SEEK_SET)函數(shù)案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08

最新評論