Это все сильно зависит от компилятора. Как уже было замечено, бессмысленно запариваться над такими мелочами, когда пишешь на высокоуровненых языках, ладно С, но я видел людей которые пытаются проводить подобную оптимизация на питоне

Но мне стало интересно.

Проведем тест. Напишем 2 наиболее примитивные программы:
int main(void) {
char temp = 0;
switch(temp) {
case 0: write(0, "0", 1);
break;
case 1: write(0, "1", 1);
break;
default: write(0, "2", 1);
}
return 0;
}
int main(void) {
char temp=0;
if (temp == 0)
write(0, "0", 1);
else if (temp == 1)
write(0, "1", 1);
else
write(0, "2", 1);
return 0;
}
А теперь дизассемблируем обе и посмотрим на main:
00000000004004fc <main>:
4004fc: 55 push %rbp
4004fd: 48 89 e5 mov %rsp,%rbp
400500: 48 83 ec 10 sub $0x10,%rsp
400504: c6 45 ff 00 movb $0x0,-0x1(%rbp)
400508: 0f be 45 ff movsbl -0x1(%rbp),%eax
40050c: 85 c0 test %eax,%eax
40050e: 74 07 je 400517 <main+0x1b>
400510: 83 f8 01 cmp $0x1,%eax
400513: 74 1d je 400532 <main+0x36>
400515: eb 36 jmp 40054d <main+0x51>
400517: ba 01 00 00 00 mov $0x1,%edx
40051c: be 14 06 40 00 mov $0x400614,%esi
400521: bf 00 00 00 00 mov $0x0,%edi
400526: b8 00 00 00 00 mov $0x0,%eax
40052b: e8 b0 fe ff ff callq 4003e0 <write@plt>
400530: eb 34 jmp 400566 <main+0x6a>
400532: ba 01 00 00 00 mov $0x1,%edx
400537: be 16 06 40 00 mov $0x400616,%esi
40053c: bf 00 00 00 00 mov $0x0,%edi
400541: b8 00 00 00 00 mov $0x0,%eax
400546: e8 95 fe ff ff callq 4003e0 <write@plt>
40054b: eb 19 jmp 400566 <main+0x6a>
40054d: ba 01 00 00 00 mov $0x1,%edx
400552: be 18 06 40 00 mov $0x400618,%esi
400557: bf 00 00 00 00 mov $0x0,%edi
40055c: b8 00 00 00 00 mov $0x0,%eax
400561: e8 7a fe ff ff callq 4003e0 <write@plt>
400566: b8 00 00 00 00 mov $0x0,%eax
40056b: c9 leaveq
40056c: c3 retq
40056d: 0f 1f 00 nopl (%rax)
00000000004004fc <main>:
4004fc: 55 push %rbp
4004fd: 48 89 e5 mov %rsp,%rbp
400500: 48 83 ec 10 sub $0x10,%rsp
400504: c6 45 ff 00 movb $0x0,-0x1(%rbp)
400508: 80 7d ff 00 cmpb $0x0,-0x1(%rbp)
40050c: 75 1b jne 400529 <main+0x2d>
40050e: ba 01 00 00 00 mov $0x1,%edx
400513: be 14 06 40 00 mov $0x400614,%esi
400518: bf 00 00 00 00 mov $0x0,%edi
40051d: b8 00 00 00 00 mov $0x0,%eax
400522: e8 b9 fe ff ff callq 4003e0 <write@plt>
400527: eb 3a jmp 400563 <main+0x67>
400529: 80 7d ff 01 cmpb $0x1,-0x1(%rbp)
40052d: 75 1b jne 40054a <main+0x4e>
40052f: ba 01 00 00 00 mov $0x1,%edx
400534: be 16 06 40 00 mov $0x400616,%esi
400539: bf 00 00 00 00 mov $0x0,%edi
40053e: b8 00 00 00 00 mov $0x0,%eax
400543: e8 98 fe ff ff callq 4003e0 <write@plt>
400548: eb 19 jmp 400563 <main+0x67>
40054a: ba 01 00 00 00 mov $0x1,%edx
40054f: be 18 06 40 00 mov $0x400618,%esi
400554: bf 00 00 00 00 mov $0x0,%edi
400559: b8 00 00 00 00 mov $0x0,%eax
40055e: e8 7d fe ff ff callq 4003e0 <write@plt>
400563: b8 00 00 00 00 mov $0x0,%eax
400568: c9 leaveq
400569: c3 retq
40056a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1)
Как и следовало ожидать, сыграть на таких различиях не будут пытаться, скорее всего, даже при написании прог для ракет

Но со свитчами ассемблерный код получился более читабельным (это скорее минус). Ещё тоже важно понимать, что компиляторы умеют некоторые вещи оптимизировать, поэтому бинарик может различаться при малейших изменениях.
К финалу: пишите хороший, читабельный код, а не думайте о ерунде. перфекционизм в таких местах ни к чему.
