더북(TheBook)

프로그램에서 연산의 수행 과정과 결과가 항상 관측 가능(observable)한 것은 아니다. 주소 기반 메모리(addressable memory)에 저장하거나 출력 장치에 쓸 때만 볼 수 있다. 앞에 나온 예제에서 printfx를 평가해 그 결과를 스트링으로 표현하여 터미널에 출력하므로 앞 줄에서 수행한 결과를 어느 정도 ‘관측할 수 있다’. 하지만 그 앞에 나온 부분 표현식이나 (곱셈이나 뺄셈 같은) 중간 결과는 전혀 볼 수 없다. 그 값을 담을 변수를 정의하지 않았기 때문이다.

C 컴파일러는 최적화(optimization)C 과정을 수행할 때, 최종 결과의 정확성을 해치지 않는다면 겉으로 드러나지 않는 계산 과정을 얼마든지 축약할 수 있다. 방금 본 예제 코드를 최적화하는 방법은 크게 두 가지가 있다. 하나는 변수 xprintf 이후에 사용하지 않고 터미널 출력에만 사용한다고 판단해서 printf를 호출하는 문장을 다음과 같이 바꿀 수 있다(최적화를 고려하면 바람직한 방법이다).

printf("x is 4.5\n");

다시 말해 앞에 나온 계산 과정을 모두 컴파일 시간에 처리하고, 실행 파일에는 고정된 스트링 하나를 출력하도록 한다. 변수 정의를 비롯한 다른 부분은 모두 제거된다.

또 다른 최적화 방법은 x를 뒤에서 다시 사용하는 경우에 적용된다. 이럴 때 컴파일러는 다음과 같이 처리할 수도 있다.

double x = 4.5;
printf("x is 4.5\n");
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.