링커, 로더, 실행 파일

재귀가 너무 깊어져 스택의 상한을 넘었을 때, Linux 등에서 일반적으로 일어나는 일로 올바른 것은?

  1. A스택 끝에 있는, 접근을 금지한 가드 페이지에 닿아 프로그램이 비정상 종료된다
  2. BOS가 자동으로 스택을 디스크로 옮겨 얼마든지 깊게 재귀할 수 있다
  3. C오래된 스택 프레임이 자동으로 지워져 계산이 올바르게 계속된다
정답과 해설 보기

정답: A. 스택 끝에 있는, 접근을 금지한 가드 페이지에 닿아 프로그램이 비정상 종료된다

스택에는 상한이 있으며 그 끝에는 접근을 금지한 가드 페이지가 놓여 있습니다. 재귀가 너무 깊어 스택이 여기에 도달하면 페이지 폴트가 발생하여 OS가 프로그램을 중단시킵니다(세그멘테이션 오류). 다른 데이터를 망가뜨리기 전에 멈출 수 있다는 것이 가드 페이지의 이점입니다. 큰 배열을 지역 변수로 만들어도 같은 일이 일어나므로, 큰 데이터는 힙에 두는 것이 안전합니다.

  • A. 올바릅니다. 스택 오버플로로 검출됩니다.
  • B. 상한을 넘어 늘리는 일은 하지 않습니다.
  • C. 프레임을 마음대로 지우면 돌아갈 수 없게 됩니다.
이 분야 연습하기 분야로 돌아가기

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

  1. C 언어에서 초깃값을 쓰지 않은 지역 변수와 전역 변수의, 사용을 시작했을 때의 값에 대한 설명으로 올바른 것은?
  2. malloc과 free를 반복하는 사이에, 빈 메모리의 합계는 충분한데도 큰 영역을 한꺼번에 확보하지 못하게 되는 경우가 있다. 이 현상을 무엇이라고 하는가?
  3. 공유 라이브러리를 만들 때, 외부에서 사용하는 함수만 공개하고 내부 함수는 심볼의 가시성(visibility)을 「hidden」으로 하는 이점으로 올바른 것은?
  4. C++에서 전역 오브젝트의 생성자가 main보다 먼저 실행되는 구조로 올바른 것은?
  5. 컴파일러가 하나의 소스 파일에서 출력하는 오브젝트 파일(.o)에 대한 설명으로 올바른 것은?

이 분야의 비교