컴파일러

위의 코드에 공통 부분식 제거를 적용했을 때의 설명으로 올바른 것은?

x = (a + b) * c;
y = (a + b) * d;
  1. Aa + b를 1번만 계산하여 임시 변수에 넣고 두 식에서 재사용한다
  2. Bx와 y는 비슷한 식이므로 어느 한쪽의 계산을 삭제한다
  3. 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. 무거운 연산을 가볍게 하는 것은 강도 감소입니다.
이 분야 연습하기 분야로 돌아가기

컴파일러의 다른 문제

  1. 불필요한 코드의 삭제(데드 코드 제거)로 제거되는 것으로 올바른 것은?
  2. 함수 인라인 전개의 장점과 단점의 조합으로 올바른 것은?
  3. 루프 전개(루프 언롤링)의 주된 효과로 올바른 것은?
  4. 위의 루프에서 루프 불변식의 이동(루프 밖으로의 이동) 대상이 되는 계산은? (x, y는 루프 안에서 변경되지 않는다고 한다)
  5. 위의 루프에서 첨자 계산 i * 4에 강도 감소를 적용했을 때의 변환으로 올바른 것은?

이 분야의 비교