Devlog

if에 관한 고찰 (In C)

먼저 GCC의 최적화 방식을 알아보자.
GCC는 상수가 들어왔을 때 해당 값에 따라서 비교하는 명령어(어셈에선 cmp)를 생성하지 않는다. 즉, 다음과 같은 식에서 GCC는 cmp와 je(jump)를 생성하지 않고 바로 내부 코드를 생성한다

if (true) n = 1;
mov    DWORD PTR [rbp-0x4],0x1


이 방식은 연산자가 존재할 때에도 성립한다.

if (true || false);
if (true && false);

이 상황에서도 위와 같은 방식이 적용된다. 따라서 if문 내부의 상수의 값이 들어가면 gcc는 이를 먼저 처리하고 그 처리에 따라 뒤에 나올 코드를 넣을지 않넣을지를 결정한다.

추가로 if문 내부 코드가 존재하지 않다면 다음 두가지 경우로 나눠진다.
1. 조건문이 상수인 경우 => 아예 코드 자체를 생성하지 않는다.
2. 조건문에 변수 또는 함수가 존재하는 경우 => 값을 바꾸는 행위나 함수가 존재한다면 실행하고 아닌 경우 생략해버린다

(즉, false가 오고 &&가 오는 상황처럼 초장부터 조건이 성립하지 않는다면 아예 코드가 생성되지 않는 다는 뜻이다)


이번에는 if에 여러 조건이 &&나

또한 같은 원리로 작동한다. 얘는 반대로 하나라도 만족을 하는 순간 실행하는 위치로 이동하는 것을 볼 수 있다.

Previous

bool과 int의 관계 (In C)

2022.03.12

Next

main의 반환형에 관한 고찰 (In C)

2022.05.04

<- Back to posts

Comments