读书人

“编译器对switch…case可以做优化用

发布时间: 2013-01-08 14:02:14 作者: rapoo

“编译器对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这地方存储了一个跳转表,如果分支比较多,表就比较大。

读书人网 >C语言

热点推荐