컴파일러
위의 코드에 공통 부분식 제거를 적용했을 때의 설명으로 올바른 것은?
x = (a + b) * c;
y = (a + b) * d;
- Aa + b를 1번만 계산하여 임시 변수에 넣고 두 식에서 재사용한다
- Bx와 y는 비슷한 식이므로 어느 한쪽의 계산을 삭제한다
- C곱셈을 덧셈으로 치환하여 계산을 가볍게 한다
정답과 해설 보기
정답: A. a + b를 1번만 계산하여 임시 변수에 넣고 두 식에서 재사용한다
공통 부분식 제거는 같은 값이 되는 식을 여러 번 계산하고 있을 때 1번만 계산하여 결과를 재사용하는 최적화입니다. 이 예에서는 t = a + b를 계산해 두고 x = t * c, y = t * d로 하면 덧셈이 1번 줄어듭니다. 다만 두 식 사이에서 a나 b가 바뀌지 않음을 확인해야 합니다. x와 y는 서로 다른 값이므로 어느 한쪽을 삭제할 수는 없습니다. 곱셈을 가벼운 연산으로 치환하는 것은 강도 감소라는 다른 최적화입니다.
- A. 올바릅니다. 같은 식을 1번만 계산하여 재사용합니다.
- B. x와 y는 값이 다르므로 둘 다 필요합니다.
- C. 무거운 연산을 가볍게 하는 것은 강도 감소입니다.