11-15 switch 的4種優(yōu)化手法

第一種情況:分支小于4個

生成引導(dǎo)性的跳轉(zhuǎn)表

cmp ....
je   ....
cmp   ....
je    ...
.......
cmp ..
 跳轉(zhuǎn)到default或者 switch end 舵稠,不同編譯器的表達(dá)形式可能不太一樣

區(qū)分default和 switch end : 排除掉代碼外提優(yōu)化后疹鳄,找一個break的點(diǎn)看跳的地方是否一樣。

定式:

多個je跳到代碼塊,je之間只有影響標(biāo)志位的代碼垃瞧,沒有實質(zhì)性功能的代碼甩十,代碼塊在別的位置船庇,通常是連續(xù)的,因為在沒寫break的情況要順序執(zhí)行侣监,所以寫在一起可以降低代碼復(fù)雜度鸭轮。


第二種情況:多分支,且case的數(shù)據(jù)比較有線性規(guī)律橄霉,不連續(xù)的地方相差不是很多窃爷。

這種情況會做一個case的地址表

一上來先和case里最大的比較
ja ;跳default 或 switch end
.....
jmp [reg * 4 + CASE_ADDRESS_TABLE]

這個CASE_ADDRESS_TABLE就是跳轉(zhuǎn)表,anzhao case 值從小到大排序姓蜂,中間間隔的case值會跳到default按厘,如果沒有defual會跳到 switch end

如果case的最小值不是0,會做平移調(diào)整钱慢,保證最小值在0的下標(biāo)逮京。


第三種情況:多分支,case值沒有明顯順序滩字,MAX - MIN 在255以內(nèi)

采用調(diào)色板的壓縮手法:首先用一個一維數(shù)組存放所有的case數(shù)據(jù)造虏,case間隔的值填同一個數(shù)字對應(yīng)defaual,再用一個移位數(shù)組麦箍,填充對應(yīng)的跳轉(zhuǎn)地址漓藕。
根據(jù)不同的輸入,對齊0后在第一張表中找到索引挟裂,再去第二張表找到跳轉(zhuǎn)地址享钞。
這種方法拿時間換空間。

識別:第一次尋址用的是 byte數(shù)組诀蓉。 值給到reg8

第四種情況:多分支栗竖,case值沒有明顯順序,MAX - MIN > 255

以二分法判斷渠啤,很容易識別

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末狐肢,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子沥曹,更是在濱河造成了極大的恐慌份名,老刑警劉巖碟联,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異僵腺,居然都是意外死亡鲤孵,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進(jìn)店門辰如,熙熙樓的掌柜王于貴愁眉苦臉地迎上來普监,“玉大人,你說我怎么就攤上這事琉兜】” “怎么了?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵豌蟋,是天一觀的道長漆际。 經(jīng)常有香客問我,道長夺饲,這世上最難降的妖魔是什么奸汇? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮往声,結(jié)果婚禮上擂找,老公的妹妹穿的比我還像新娘。我一直安慰自己浩销,他們只是感情好贯涎,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著慢洋,像睡著了一般塘雳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上普筹,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天败明,我揣著相機(jī)與錄音,去河邊找鬼太防。 笑死妻顶,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蜒车。 我是一名探鬼主播讳嘱,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼酿愧!你這毒婦竟也來了沥潭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤嬉挡,失蹤者是張志新(化名)和其女友劉穎钝鸽,沒想到半個月后呼渣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡寞埠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了焊夸。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仁连。...
    茶點(diǎn)故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖阱穗,靈堂內(nèi)的尸體忽然破棺而出饭冬,到底是詐尸還是另有隱情,我是刑警寧澤揪阶,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布昌抠,位于F島的核電站,受9級特大地震影響鲁僚,放射性物質(zhì)發(fā)生泄漏炊苫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一冰沙、第九天 我趴在偏房一處隱蔽的房頂上張望侨艾。 院中可真熱鬧,春花似錦拓挥、人聲如沸唠梨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽当叭。三九已至,卻和暖如春盖灸,著一層夾襖步出監(jiān)牢的瞬間蚁鳖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工赁炎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留才睹,地道東北人。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓甘邀,卻偏偏與公主長得像琅攘,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子松邪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內(nèi)容