컴파일러

컴파일러의 상수 폴딩의 예로 올바른 것은?

  1. A같은 함수를 여러 번 호출하는 부분을 1번의 호출로 합친다
  2. Bx = 3 * 4를 컴파일 시에 계산하여 x = 12로 만든다
  3. C루프의 본체를 4번 분량 나열하여 반복 횟수를 줄인다
정답과 해설 보기

정답: B. x = 3 * 4를 컴파일 시에 계산하여 x = 12로 만든다

상수 폴딩은 컴파일 시점에 값이 정해지는 식을 미리 계산하여 결과 상수로 치환하는 최적화입니다. 3 * 4는 실행할 때마다 같은 12가 되므로 실행 시에 곱셈을 할 필요가 없습니다. 상수 전파와 조합하면 변수를 거친 계산도 한꺼번에 폴딩할 수 있습니다. 부동소수점에서는 반올림 방식을 맞춰야 하는 등 주의할 점도 있습니다. 루프의 본체를 나열하는 것은 루프 전개이고, 함수 호출을 합치는 것은 다른 최적화입니다.

  • A. 함수 호출을 합치는 것은 상수 폴딩이 아닙니다.
  • B. 올바릅니다. 값이 정해지는 식을 미리 계산합니다.
  • C. 본체를 나열하는 것은 루프 전개입니다.
이 분야 연습하기 분야로 돌아가기

컴파일러의 다른 문제

  1. 위의 코드에 상수 전파와 상수 폴딩을 반복해서 적용하면 최종적으로 어떤 코드가 되는가?
  2. 위의 코드에 공통 부분식 제거를 적용했을 때의 설명으로 올바른 것은?
  3. 불필요한 코드의 삭제(데드 코드 제거)로 제거되는 것으로 올바른 것은?
  4. 함수 인라인 전개의 장점과 단점의 조합으로 올바른 것은?
  5. 루프 전개(루프 언롤링)의 주된 효과로 올바른 것은?

이 분야의 비교