링커, 로더, 실행 파일

malloc과 free를 반복하는 사이에, 빈 메모리의 합계는 충분한데도 큰 영역을 한꺼번에 확보하지 못하게 되는 경우가 있다. 이 현상을 무엇이라고 하는가?

  1. A메모리 누수
  2. B단편화(프래그멘테이션)
  3. C스택 오버플로
정답과 해설 보기

정답: B. 단편화(프래그멘테이션)

크기가 다른 영역의 확보와 해제를 반복하면 사용 중인 영역 사이에 작은 빈 공간이 흩어집니다. 빈 공간의 합계가 크더라도 이어진 큰 빈 공간이 없으면 큰 확보는 실패합니다. 이를 단편화라고 합니다. 메모리 할당기는 크기별로 나누어 관리하거나 이웃한 빈 공간을 합치는 등으로 단편화를 줄입니다. 오래 동작을 계속하는 임베디드 기기에서는 특히 주의가 필요합니다.

  • A. 메모리 누수는 해제를 잊어서 쓸 수 있는 메모리가 줄어드는 것입니다.
  • B. 올바릅니다. 빈 공간이 잘게 나뉘어 버린 상태입니다.
  • C. 스택 오버플로는 스택의 상한을 넘는 것입니다.
이 분야 연습하기 분야로 돌아가기

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

  1. 공유 라이브러리를 만들 때, 외부에서 사용하는 함수만 공개하고 내부 함수는 심볼의 가시성(visibility)을 「hidden」으로 하는 이점으로 올바른 것은?
  2. C++에서 전역 오브젝트의 생성자가 main보다 먼저 실행되는 구조로 올바른 것은?
  3. 컴파일러가 하나의 소스 파일에서 출력하는 오브젝트 파일(.o)에 대한 설명으로 올바른 것은?
  4. 링커의 주된 역할로 올바른 것은?
  5. 링커가 수행하는 심볼 해석에 대한 설명으로 올바른 것은?

이 분야의 비교