首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

“编译器对switch…case可以做优化,用空间换取时间”的有关问题

2013-01-08 
“编译器对switch…case可以做优化,用空间换取时间”的问题?看了下反汇编,switch (*ch)翻译如下:但所谓的“空

“编译器对switch…case可以做优化,用空间换取时间”的问题?
看了下反汇编,switch (*ch)翻译如下:
但所谓的“空间换取时间”,我为何觉得,比起if/else if:时间空间上都有优化呢?
switch (*ch)
011135BD  mov         eax,dword ptr [ch] 
011135C0  movsx       ecx,byte ptr [eax] 
011135C3  mov         dword ptr [ebp-0E8h],ecx 
011135C9  mov         edx,dword ptr [ebp-0E8h] 
011135CF  sub         edx,61h 
011135D2  mov         dword ptr [ebp-0E8h],edx 
011135D8  cmp         dword ptr [ebp-0E8h],7 
011135DF  ja          $LN2+0Bh (1113625h) 
011135E1  mov         eax,dword ptr [ebp-0E8h] 
011135E7  jmp         dword ptr  (1113674h)[eax*4]

int _tmain(int argc, _TCHAR* argv[])
{
long ulCnt1 = 0;
long ulCnt2 = 0;
char* ch = "aha!";

while (*ch)
{
switch (*ch)

case  'a':
ulCnt2++;
break;

case  'b':
ulCnt2++;
break;

case  'c':
ulCnt2++;
break;

case  'd':
ulCnt2++;
break;

case   'h':
ulCnt2++;
break;

default:
ulCnt1++;
break;
}
ch++;
}
printf("%u, %u\n", ulCnt1, ulCnt2);

return 0;
}

[解决办法]
1113674h这地方存储了一个跳转表,如果分支比较多,表就比较大。

热点排行