컴파일러
레지스터 할당에서 「스필」이 일어나면 생성되는 코드는 어떻게 되는가?
- A값을 스택에 내보내고 다시 읽어 들이는 명령이 늘어 느려지기 쉽다
- B레지스터의 수가 자동으로 늘어나 모든 값을 레지스터에 둘 수 있게 된다
- C사용되지 않는 값이 삭제되어 명령의 수가 줄어든다
정답과 해설 보기
정답: A. 값을 스택에 내보내고 다시 읽어 들이는 명령이 늘어 느려지기 쉽다
스필은 동시에 살아 있는 값이 레지스터 수보다 많을 때 일부 값을 메모리(스택)에 두는 것입니다. 그 값을 사용할 때마다 읽기 명령, 바꿀 때마다 쓰기 명령이 필요해 명령이 늘고 메모리 접근만큼 느려지기 쉽습니다. 그래서 컴파일러는 루프 안 등 자주 사용되는 값을 레지스터에 남기고, 별로 사용되지 않는 값을 골라 스필시킵니다. 레지스터의 수는 CPU로 정해져 있어 늘어나지 않으며, 불필요한 값의 삭제와도 다른 이야기입니다.
- A. 올바릅니다. 내보내고 다시 읽는 명령이 늘어 느려지기 쉽습니다.
- B. 레지스터의 수는 CPU로 정해져 있어 늘어나지 않습니다.
- C. 불필요한 값의 삭제는 다른 최적화입니다.