“编译器对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;
}