컴파일러

컴파일러의 레지스터 할당에서 간섭 그래프를 색칠하는(채색하는) 방법을 사용할 때, 그래프의 노드와 간선이 나타내는 것의 조합으로 올바른 것은?

  1. A노드는 명령, 간선은 명령의 실행 순서
  2. B노드는 레지스터, 간선은 레지스터끼리의 배선
  3. C노드는 값, 간선은 동시에 살아 있는 관계
정답과 해설 보기

정답: C. 노드는 값, 간선은 동시에 살아 있는 관계

간섭 그래프에서는 변수나 중간 값을 노드로 하고, 어느 시점에 둘 다 아직 사용되는(살아 있는) 두 값을 간선으로 연결합니다. 간선으로 이어진 값은 동시에 필요하므로 같은 레지스터에 넣을 수 없습니다. 레지스터 수를 k개로 하여 이웃끼리 같은 색이 되지 않도록 k색으로 칠할 수 있다면, 색을 그대로 레지스터에 대응시켜 할당할 수 있습니다. 칠할 수 없는 경우에는 일부 값을 메모리로 내보냅니다(스필). 명령의 순서나 레지스터의 배선을 나타내는 그래프가 아닙니다.

  • A. 명령의 순서를 나타내는 그래프가 아닙니다.
  • B. 레지스터의 배선을 나타내는 그래프가 아닙니다.
  • C. 올바릅니다. 동시에 살아 있는 값끼리를 간선으로 연결합니다.
이 분야 연습하기 분야로 돌아가기

컴파일러의 다른 문제

  1. 레지스터 할당에서 「스필」이 일어나면 생성되는 코드는 어떻게 되는가?
  2. 컴파일러의 명령 스케줄링의 주된 목적은?
  3. 위의 함수의 마지막 재귀 호출에 꼬리 호출 최적화를 적용하면 어떤 효과가 있는가?
  4. 컴파일러와 인터프리터의 차이로 올바른 것은?
  5. JIT 컴파일을 사용하는 실행 환경의 특징으로 올바른 것은?

이 분야의 비교