링커, 로더, 실행 파일

.bss 섹션의 특징으로 올바른 것은?

  1. A함수의 지역 변수를 호출될 때마다 놓는 영역이다
  2. B초깃값이 없는(또는 0인) 변수의 영역으로, 파일에는 크기만 기록하고 읽어 들일 때 0으로 채운다
  3. C상수 문자열을 놓는, 쓰기가 불가능한 영역이다
정답과 해설 보기

정답: B. 초깃값이 없는(또는 0인) 변수의 영역으로, 파일에는 크기만 기록하고 읽어 들일 때 0으로 채운다

초깃값을 쓰지 않은 전역 변수나 정적 변수는 C 언어의 규칙에 따라 0에서 시작합니다. 내용이 모두 0이라면 파일에 0을 늘어놓아 저장하는 것은 낭비이므로, .bss 섹션에는 크기만 기록하고 로더가 메모리를 확보해 0으로 채웁니다. 예를 들어 「static char buf[1000000];」이 있어도 실행 파일이 1MB 커지지는 않습니다.

  • A. 지역 변수는 스택에 놓입니다.
  • B. 올바릅니다. 파일 크기를 절약할 수 있습니다.
  • C. 상수는 .rodata에 놓입니다.
이 분야 연습하기 분야로 돌아가기

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

  1. C 언어의 「char *p = "hello"; p[0] = 'H';」를 실행하면 많은 환경에서 비정상 종료된다. 그 이유로 올바른 것은?
  2. 위의 전역 변수 중 일반적으로 .bss 섹션에 놓이는 것의 조합은?
  3. C 언어의 함수 안에서 선언한, static이 붙지 않은 지역 변수(자동 변수)는 실행 중 어디에 놓이는가?
  4. C 언어의 malloc으로 확보한 메모리는 일반적으로 프로세스의 어느 영역에서 가져오는가?
  5. Linux 등의 일반적인 프로세스의 메모리 배치를 주소가 작은 쪽부터 나열한 것으로 올바른 것은?

이 분야의 비교