https://arca.live/b/programmer/68884678?p=1
농담으로 올린 글인데 갑자기 궁금해져서 직접 테스트해봤읍니다.
실행 환경은 윈도우10 64비트, MSVC (2019) 이고, 쓰는 CPU는 AMD x3800이며, 언어는 C언어 기준이고, 컴파일러 최적화 옵션은 아래와 같이 세팅했읍니다.


대략 코드는 아래와 같습니다.


왼쪽부터 lookup table, if-else, switch입니다.
사용자가 입력받은 값을 200,0000,0000번 더하는 코드입니다.
각각 실행시간은...
(IF-ELSE)
(switch)

(그리고 lookup table)
???????
물론 lookup table이 cmp명령 안 써서 더 빠르다는건 알고 있었는데 왜 0초가 나오지
그래서 어셈블리어를 봐봤읍니다.

if-else:


switch:


If-else랑 switch문 모두 cmp 명령어와 je(두 값이 같으면 점프), jne(두 값이 같지 않으면 점프)를 통해 add(더하기)를 정직하게 200억번 수행합니다.




근데 lookup table의 경우 cmp, jne, je야 당연히 쓸 일이 없을거고

add명령어마저 그냥 imul을 써서 한번에 바로 곱해버립니다.

아무래도 룩업테이블로 짜면 그냥 곱하기 하는게 더 빠르다는걸 컴파일러가 인지해서 그런듯 합니다.
근데 if-else랑 switch에서는 왜 그렇게 인지를 못하고 최적화를 못하는지에 대해서는...