컴파일러

함수 인라인 전개의 장점과 단점의 조합으로 올바른 것은?

  1. A장점은 코드가 작아지는 것, 단점은 호출 오버헤드가 늘어나는 것
  2. B장점은 컴파일이 빨리 끝나는 것, 단점은 실행 결과가 바뀌어 버리는 것
  3. C장점은 호출 오버헤드가 사라지는 것, 단점은 코드가 커지는 것
정답과 해설 보기

정답: C. 장점은 호출 오버헤드가 사라지는 것, 단점은 코드가 커지는 것

인라인 전개에서는 호출 대신 함수의 본체를 끼워 넣으므로 인수 전달, 분기, 복귀의 오버헤드가 없어집니다. 또한 호출하는 쪽의 상수 등이 본체에 전달되어 상수 폴딩이나 불필요한 코드의 삭제가 효과를 발휘하게 되는 것이 큰 장점입니다. 반면 호출할 때마다 본체의 복사본이 생기므로 코드가 커지고 명령 캐시 미스가 늘어나기도 하므로, 작은 함수나 자주 호출되는 함수를 골라 수행합니다. 올바르게 수행하면 실행 결과는 바뀌지 않습니다.

  • A. 코드는 오히려 커지고 호출 오버헤드는 줄어듭니다.
  • B. 올바르게 수행하면 실행 결과는 바뀌지 않습니다.
  • C. 올바릅니다. 호출 오버헤드가 사라지고 최적화가 확대되는 반면 코드가 커집니다.
이 분야 연습하기 분야로 돌아가기

컴파일러의 다른 문제

  1. 루프 전개(루프 언롤링)의 주된 효과로 올바른 것은?
  2. 위의 루프에서 루프 불변식의 이동(루프 밖으로의 이동) 대상이 되는 계산은? (x, y는 루프 안에서 변경되지 않는다고 한다)
  3. 위의 루프에서 첨자 계산 i * 4에 강도 감소를 적용했을 때의 변환으로 올바른 것은?
  4. 위의 루프를 SIMD 명령으로 벡터화하기 어려운 주된 이유는?
  5. 위의 함수에서 컴파일러가 *b의 읽기를 루프 밖으로 내보내는 최적화를 그대로는 수행할 수 없는 이유는?

이 분야의 비교