티스토리 뷰

개발

[C/C++] 조건문 컴파일러 최적화

LazySonic 2025. 5. 22. 19:36

if문이 컴파일러가 switch로 대체할 수 있을 만큼 간단하고 내부에서 간단한 함수 콜을 한다면, 컴파일 타임에 Jump Table을 만들어 이를 기반으로 함수를 콜해주도록 최적화된다.

 

예를 들면, 아래와 같은 if else 문과 switch문이 있다고 가정하자.

void dispatch(int x) {
    if (x == 0) f0();
    else if (x == 1) f1();
    else if (x == 2) f2();
    else if (x == 3) f3();
}
// switch로 변환
switch (x) {
    case 0: f0(); break;
    case 1: f1(); break;
    case 2: f2(); break;
    case 3: f3(); break;
}

이는 컴파일러가 어샘블리로 다음과 같이 전환한다.

jmp [jump_table + eax * 4]

구축된 점프 테이블과 인자를 갖고, 단순하게 함수로 점프 콜 해버린다.

 

여기서 주의해야 할 점은 인자로 enum이 들어오는 경우 switch에서 default를 사용할 수 있는데 이 때는 다소 주의를 해야 한다.

이는, default 아래 작성되는 로직은 jump_table에 넣지 못 하기 때문인데 이런 문제로 컴파일러의 최적화 과정을 믿을 수 없다면 다음과 같은 방법을 사용하면 좋다.

void (*handlers[3])() = { handleCase0, handleCase1, handleCase2 };
handlers[x](); // 조건 없이 바로 호출

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/04   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
글 보관함