07 switch
1. case分支个数小于等于3时,有多个sub,jz引导代码,它们之间没有具体代码,这是和if结构的区别。
release版的defalut紧随其后:
debug版是jmp到default:
2. case分支间隔较为均匀时,所有跳转地址组成表,通过下标jmp到对应的地址。
3. case分支间隔较大,但在256范围内,采用类似位图调色板的方法,保存INDEX_TABLE和CASE_TABLE。在INDEX_TABLE中用1个字节保存下标,所以超出1个字节表示范围的无法用此方案。
INDEX_TABLE中6占多数,认定为default,红框中的数字代表在CASE_TABLE中的下标。由上图可知,case下标最小100,最大167,故CASE_TABLE的第0项重命名为CASE_100。
第二个红框中数字是1,在INDEX_TABLE中下标为11,故CASE_TABLE的第0项重命名为CASE_111,以此类推。
4. 如果case分支间隔过大,超出1字节表示范围,会组织成AVL树的形式