컴파일러

레지스터 할당의 준비로 수행하는 생존 구간(라이브니스) 분석에서 구하는 것은?

  1. A프로그램 전체에서 각 변수가 선언된 줄의 번호
  2. B변수 값의 최댓값과 최솟값
  3. C각 시점에서 그 값이 나중에 아직 사용될 가능성이 있는지 여부
정답과 해설 보기

정답: C. 각 시점에서 그 값이 나중에 아직 사용될 가능성이 있는지 여부

생존 구간 분석에서는 프로그램의 각 시점에서 어떤 값이 이후에 읽힐 가능성이 있는지(살아 있는지)를 제어 흐름 그래프를 따라가며 구합니다. 살아 있는 값은 레지스터에 유지해 두어야 하지만, 더 이상 사용되지 않는 값의 레지스터는 다른 값에 재사용할 수 있습니다. 동시에 살아 있는 값끼리는 같은 레지스터에 넣을 수 없으므로, 이 결과로 간섭 그래프를 만듭니다. 선언 위치나 값의 범위를 구하는 분석이 아닙니다.

  • A. 선언 위치가 아니라 사용될 가능성을 조사합니다.
  • B. 값의 범위를 구하는 분석과는 다른 것입니다.
  • C. 올바릅니다. 각 시점에서 값이 아직 사용되는지를 구합니다.
이 분야 연습하기 분야로 돌아가기

컴파일러의 다른 문제

  1. 어떤 함수 안에서 동시에 살아 있는 값의 수가 가장 많은 곳에서 5개였다. 간섭 그래프가 이 5개 이외의 제약을 만들지 않는 단순한 경우, 모든 값을 스필 없이 레지스터에 두려면 레지스터가 최소 몇 개 필요한가?
  2. 반복 횟수가 100회인 루프를 본체를 4번 분량 나열하는 루프 전개로 바꿔 쓰면, 횟수 판정과 분기는 몇 번이 되는가? (100은 4로 나누어떨어진다고 가정한다)
  3. C 언어 프로그램에서 실행 파일이 만들어지기까지의 일반적인 흐름으로 올바른 것은 무엇인가?
  4. 생성한 기계어의 짧은 나열을 작은 창으로 보면서, 불필요한 명령의 조합을 더 좋은 명령으로 대체하는 최적화를 무엇이라고 하는가?
  5. 위의 코드에서 sq를 인라인 전개한 뒤 이어서 효과를 내는 최적화와 그 결과로 올바른 것은 무엇인가?

이 분야의 비교