링커, 로더, 실행 파일
재귀가 너무 깊어져 스택의 상한을 넘었을 때, Linux 등에서 일반적으로 일어나는 일로 올바른 것은?
- A스택 끝에 있는, 접근을 금지한 가드 페이지에 닿아 프로그램이 비정상 종료된다
- BOS가 자동으로 스택을 디스크로 옮겨 얼마든지 깊게 재귀할 수 있다
- C오래된 스택 프레임이 자동으로 지워져 계산이 올바르게 계속된다
정답과 해설 보기
정답: A. 스택 끝에 있는, 접근을 금지한 가드 페이지에 닿아 프로그램이 비정상 종료된다
스택에는 상한이 있으며 그 끝에는 접근을 금지한 가드 페이지가 놓여 있습니다. 재귀가 너무 깊어 스택이 여기에 도달하면 페이지 폴트가 발생하여 OS가 프로그램을 중단시킵니다(세그멘테이션 오류). 다른 데이터를 망가뜨리기 전에 멈출 수 있다는 것이 가드 페이지의 이점입니다. 큰 배열을 지역 변수로 만들어도 같은 일이 일어나므로, 큰 데이터는 힙에 두는 것이 안전합니다.
- A. 올바릅니다. 스택 오버플로로 검출됩니다.
- B. 상한을 넘어 늘리는 일은 하지 않습니다.
- C. 프레임을 마음대로 지우면 돌아갈 수 없게 됩니다.