컴파일러

코드 생성 단계의 하나인 명령 선택(인스트럭션 셀렉션)에 대한 설명으로 올바른 것은 무엇인가?

  1. A중간 표현의 연산을 대상 CPU가 가진 명령 중 어느 것으로 구현할지 정한다
  2. B실행할 프로세스를 OS가 어떤 순서로 고를지 정한다
  3. C소스 코드 안에서 주석으로 쓰인 명령을 골라낸다
정답과 해설 보기

정답: A. 중간 표현의 연산을 대상 CPU가 가진 명령 중 어느 것으로 구현할지 정한다

명령 선택은 중간 표현의 연산 나열을 대상 CPU의 구체적인 명령에 대응시키는 처리입니다. 같은 계산이라도 CPU에 따라 사용할 수 있는 명령이 다르며, 예를 들어 a * b + c를 CPU에 곱셈-덧셈 연산(FMA) 명령이 있으면 한 명령으로, 없으면 곱셈과 덧셈의 두 명령으로 구현합니다. 메모리 주소 계산을 주소 지정 모드로 합치는 등 CPU의 명령을 잘 활용할수록 빠른 코드가 됩니다. OS의 스케줄링이나 주석 처리와는 관계가 없습니다.

  • A. 올바릅니다. 중간 표현의 연산을 CPU의 명령에 대응시킵니다.
  • B. 프로세스의 순서는 OS의 스케줄러가 정합니다.
  • C. 주석은 어휘 분석에서 제거됩니다.
이 분야 연습하기 분야로 돌아가기

컴파일러의 다른 문제

  1. 크로스 컴파일러에 대한 설명으로 올바른 것은 무엇인가?
  2. 최적화를 적용해 컴파일한 프로그램을 디버거로 조사하면 일부 변수의 값이 "표시할 수 없음"으로 나오는 경우가 있다. 주된 이유는 무엇인가?
  3. 위의 함수에 상수 전파·상수 폴딩·불필요한 코드 제거를 충분히 적용했을 때, 함수가 반환하는 값과 남는 코드로 올바른 것은 무엇인가?
  4. 반복 횟수가 100회인 루프를 본체를 4번 분량 나열하는 루프 전개로 바꿔 쓰면, 횟수 판정과 분기는 몇 번이 되는가? (100은 4로 나누어떨어진다고 가정한다)
  5. C 언어 프로그램에서 실행 파일이 만들어지기까지의 일반적인 흐름으로 올바른 것은 무엇인가?

이 분야의 비교