컴파일러

어떤 함수 안에서 동시에 살아 있는 값의 수가 가장 많은 곳에서 5개였다. 간섭 그래프가 이 5개 이외의 제약을 만들지 않는 단순한 경우, 모든 값을 스필 없이 레지스터에 두려면 레지스터가 최소 몇 개 필요한가?

  1. A5개
  2. B4개
  3. C10개
정답과 해설 보기

정답: A. 5개

동시에 살아 있는 5개의 값은 서로 모두 간섭하므로, 간섭 그래프 안에서 5개의 노드가 모두 간선으로 연결된 형태(완전 그래프)가 되어 칠하는 데 최소 5색이 필요합니다. 직선적인 코드처럼 생존 구간을 구간으로 나타낼 수 있는 단순한 경우에는 동시에 살아 있는 값의 최대 개수만큼의 색으로 칠할 수 있으므로 5개의 레지스터로 충분합니다. 4개로는 어딘가에서 하나의 값을 메모리로 내보내는 스필이 필요해집니다. 10개는 필요 이상으로 많은 수입니다.

  • A. 올바릅니다. 동시에 살아 있는 최대 개수인 5개가 필요하며 이 경우에는 충분합니다.
  • B. 4개로는 어딘가에서 스필이 필요해집니다.
  • C. 10개는 필요 이상으로 많은 수입니다.
이 분야 연습하기 분야로 돌아가기

컴파일러의 다른 문제

  1. 반복 횟수가 100회인 루프를 본체를 4번 분량 나열하는 루프 전개로 바꿔 쓰면, 횟수 판정과 분기는 몇 번이 되는가? (100은 4로 나누어떨어진다고 가정한다)
  2. C 언어 프로그램에서 실행 파일이 만들어지기까지의 일반적인 흐름으로 올바른 것은 무엇인가?
  3. 생성한 기계어의 짧은 나열을 작은 창으로 보면서, 불필요한 명령의 조합을 더 좋은 명령으로 대체하는 최적화를 무엇이라고 하는가?
  4. 위의 코드에서 sq를 인라인 전개한 뒤 이어서 효과를 내는 최적화와 그 결과로 올바른 것은 무엇인가?
  5. 소프트웨어 파이프라이닝에 대한 설명으로 올바른 것은 무엇인가?

이 분야의 비교