한국어
C/C++
 

C switch와 if 중 어느 것이 더 빠른가

makersweb 2017.01.31 00:47 조회 수 : 3779

switch와 if 을 비교해보고 적절하게 사용하는 방법을 알아보자.

 

#include <stdio.h>

int main(void)
{
int a, b, c, d, x = 0;
int result;

a = b = 3;
c = 5;
d = 6;
result = (a * c) + b / d;

if(result == 0)
x = result + 5;
else if(result == 1)
x = result + 10;
else if(result == 2)
x = result + 15;
else if(result == 3)
x = result + 20;
else if(result == 4)
x = result + 25;
else if(result == 5)
x = result + 30;
else
x = 0;

printf("%dn", x);

return 0;
}

 

if문을 역어셈블로 살펴보면 다음의 그림 처럼 else if 마다 비교 연산을 수행하고있다.

ifelseif.png

 

위의 예제 코드를 switch 문으로 표현한 것이다. 

 

#include <stdio.h>

int main(void)
{
int a, b, c, d, x = 0;
int result;

a = b = 3;
c = 5;
d = 6;
result = (a * c) + b / d;

switch(result)
{
case 0:
x = result + 5;
break;
case 1:
x = result + 10;
break;
case 2:
x = result + 15;
break;
case 3:
x = result + 20;
break;
case 4:
x = result + 25;
break;
case 5:
x = result + 30;
break;
default:
x = 0;
break;
}

printf("%dn", x);

return 0;
}

 

다음의 역어셈에서와 같이 최초 5보다 크면 default레이블로 분기되고 그렇지 않으면 result의 값에 따라 지정된 레이블로 점프됨을 알 수 있다.

switch.png

 

인용 및 참고문헌: 임베디드 프로그래밍 c코드 최적화

번호 제목 글쓴이 날짜 조회 수
공지 C Programming FAQs(한글번역 pdf문서) makersweb 2014.03.18 27662
22 C코드 최적화 pjk 2014.02.10 5886
21 C언어 강좌-배열과 포인터 file makersweb 2014.03.10 5165
20 영어를 C언어로, 또는 C언어를 영어로 변환 해주는 cdecl makersweb 2014.03.19 8556
19 예제소스를 통해 리틀엔디안(Little endian)과 빅엔디안(Big endian)의 차이점 알아보기 pjk 2014.05.24 8653
18 Bit fields(비트필드) pjk 2014.05.24 4833
17 구조체 메모리 저장방식 #pragma pack file pjk 2014.05.24 5899
16 함수 포인터의 배열 pjk 2014.05.24 8637
15 void형 포인터 pjk 2014.05.24 6051
14 unsigned형의 모든 상수에는 접미사 ‘U’를 사용하여야 한다. file pjk 2014.05.24 38730
13 클래스 멤버에 대한 액세스 제어 pjk 2014.06.27 5504
12 strcmp, wcscmp, _tcscmp pjk 2014.07.18 11426
11 HEX(16진수) to ASCII(아스키) 변환 코드 pjk 2014.08.24 34933
10 volatile이 정확히 어떤 의미를 가지는 건가요? pjk 2014.09.30 5458
9 c/c++문자열, 유니코드 관련 함수 makersweb 2015.07.09 6185
8 구조체 배열을 반환하는 함수를 반환하는 함수를 호출하여 구조체 멤버 배열 요소 접근하기 makersweb 2016.05.22 10823
» switch와 if 중 어느 것이 더 빠른가 file makersweb 2017.01.31 3779
6 함수포인터와 typedef로의 선언 makersweb 2018.02.03 1974
5 싱글톤 객체생성 패턴에 대해서 file makersweb 2018.07.01 4500
4 배열과 포인터, 등가포인터 예제 makersweb 2019.01.16 1956
3 C++로 플러그인 개발 file makersweb 2019.12.08 2699