컴파일러

레지스터 할당에서 「스필」이 일어나면 생성되는 코드는 어떻게 되는가?

  1. A값을 스택에 내보내고 다시 읽어 들이는 명령이 늘어 느려지기 쉽다
  2. B레지스터의 수가 자동으로 늘어나 모든 값을 레지스터에 둘 수 있게 된다
  3. C사용되지 않는 값이 삭제되어 명령의 수가 줄어든다
정답과 해설 보기

정답: A. 값을 스택에 내보내고 다시 읽어 들이는 명령이 늘어 느려지기 쉽다

스필은 동시에 살아 있는 값이 레지스터 수보다 많을 때 일부 값을 메모리(스택)에 두는 것입니다. 그 값을 사용할 때마다 읽기 명령, 바꿀 때마다 쓰기 명령이 필요해 명령이 늘고 메모리 접근만큼 느려지기 쉽습니다. 그래서 컴파일러는 루프 안 등 자주 사용되는 값을 레지스터에 남기고, 별로 사용되지 않는 값을 골라 스필시킵니다. 레지스터의 수는 CPU로 정해져 있어 늘어나지 않으며, 불필요한 값의 삭제와도 다른 이야기입니다.

  • A. 올바릅니다. 내보내고 다시 읽는 명령이 늘어 느려지기 쉽습니다.
  • B. 레지스터의 수는 CPU로 정해져 있어 늘어나지 않습니다.
  • C. 불필요한 값의 삭제는 다른 최적화입니다.
이 분야 연습하기 분야로 돌아가기

컴파일러의 다른 문제

  1. 컴파일러의 명령 스케줄링의 주된 목적은?
  2. 위의 함수의 마지막 재귀 호출에 꼬리 호출 최적화를 적용하면 어떤 효과가 있는가?
  3. 컴파일러와 인터프리터의 차이로 올바른 것은?
  4. JIT 컴파일을 사용하는 실행 환경의 특징으로 올바른 것은?
  5. LLVM의 기본 구성으로 올바른 것은?

이 분야의 비교