링커, 로더, 실행 파일

링커가 수행하는 재배치(리로케이션)에 대한 설명으로 올바른 것은?

  1. A코드와 데이터의 최종 주소가 정해진 뒤, 명령이나 데이터 안의 주소를 올바른 값으로 고쳐 쓴다
  2. B프로그램을 실행하는 도중에 다른 컴퓨터로 옮겨서 이어서 실행한다
  3. C메모리가 부족해지면 페이지를 스토리지로 내보낸다
정답과 해설 보기

정답: A. 코드와 데이터의 최종 주소가 정해진 뒤, 명령이나 데이터 안의 주소를 올바른 값으로 고쳐 쓴다

컴파일러는 각 파일을 주소 0부터 시작하는 것으로 간주하여 만들고, 다른 파일의 함수나 자신의 변수 주소를 사용하는 위치를 재배치 정보로 기록해 둡니다. 링커는 모든 파일을 나열해 실제 주소를 정한 뒤, 기록된 위치마다 올바른 주소(또는 PC로부터의 거리)를 계산해 명령에 써 넣습니다. 동적 링크에서는 이와 비슷한 고쳐 쓰기의 일부를 실행할 때 동적 링커가 수행합니다.

  • A. 올바릅니다. 재배치 정보에 기록된 위치를 고쳐 씁니다.
  • B. 그것은 프로세스 이동(마이그레이션)입니다.
  • C. 그것은 OS의 페이지 교체입니다.
이 분야 연습하기 분야로 돌아가기

링커, 로더, 실행 파일의 다른 문제

  1. C 언어 프로그램을 링크했더니 「undefined reference to `foo'」(foo에 대한 미정의 참조)라는 오류가 나왔다. 가장 가능성이 높은 원인은?
  2. a.c와 b.c 양쪽에서 static을 붙이지 않은 같은 이름의 전역 함수 void init(void)를 정의하고 링크했다. 일어나는 일로 올바른 것은?
  3. C 언어에서 함수에 static을 붙여 정의했을 때(예: static int helper(void))의 효과로 올바른 것은?
  4. C 언어에서 「extern int count;」라고 썼을 때의 의미로 올바른 것은?
  5. Linux 등에서 많이 쓰이는 ELF 형식의 파일에 대한 설명으로 올바른 것은?

이 분야의 비교