컴파일러

중간 표현의 하나인 3-주소 코드의 특징으로 올바른 것은?

  1. A1개의 명령에 연산이나 괄호를 얼마든지 포함할 수 있다
  2. B1개의 명령은 최대 3개의 주소와 1개의 연산으로 이루어진다
  3. C주소로 반드시 메모리의 물리 주소를 쓴다
정답과 해설 보기

정답: B. 1개의 명령은 최대 3개의 주소와 1개의 연산으로 이루어진다

3-주소 코드에서는 복잡한 식을 연산이 하나뿐인 단순한 명령의 나열로 분해합니다. 예를 들어 x = (a + b) * c는 t1 = a + b, x = t1 * c의 2개가 되며, 1개의 명령에 등장하는 것은 결과와 2개의 재료, 즉 최대 3개의 주소입니다. 중간 값에는 임시 이름(t1 등)을 붙입니다. 이렇게 하면 계산 순서가 분명해져 최적화나 CPU 명령으로의 변환이 쉬워집니다. 주소는 변수나 임시 이름이며 물리 주소가 아닙니다.

  • A. 1개의 명령에는 연산이 하나뿐입니다.
  • B. 올바릅니다. 최대 3개의 주소와 1개의 연산으로 이루어진 명령의 나열입니다.
  • C. 주소는 변수나 임시 이름이며 물리 주소가 아닙니다.
이 분야 연습하기 분야로 돌아가기

컴파일러의 다른 문제

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

이 분야의 비교