컴파일러
위의 루프에서 루프 불변식의 이동(루프 밖으로의 이동) 대상이 되는 계산은? (x, y는 루프 안에서 변경되지 않는다고 한다)
for (i = 0; i < n; i++)
a[i] = b[i] * (x * y);
- Ab[i] * (x * y) 전체
- Bx * y
- Ca[i]에 대한 대입
정답과 해설 보기
정답: B. x * y
루프 불변식의 이동은 반복할 때마다 같은 값이 되는 계산을 루프 앞으로 내보내 1번만 계산하는 최적화입니다. x와 y는 루프 안에서 바뀌지 않으므로 x * y는 어느 반복에서나 같은 값이 되며, t = x * y를 루프 앞에서 계산하고 a[i] = b[i] * t로 할 수 있습니다. b[i]는 i마다 다른 값이므로 b[i] * (x * y) 전체는 이동할 수 없습니다. a[i]에 대한 대입도 반복마다 다른 요소에 쓰는 것이므로 루프 안에 남깁니다.
- A. b[i]는 반복마다 바뀌므로 전체는 이동할 수 없습니다.
- B. 올바릅니다. x * y는 어느 반복에서나 같은 값입니다.
- C. 대입은 요소마다 필요하므로 루프에 남습니다.