링커, 로더, 실행 파일

C 언어에서 파일 바깥에 「int limit = 100;」이라고 쓴 전역 변수는 일반적으로 어느 섹션에 놓이는가?

  1. A.data(초깃값이 있는 데이터)
  2. B.bss(초깃값이 없는 데이터)
  3. C.text(기계어)
정답과 해설 보기

정답: A. .data(초깃값이 있는 데이터)

0이 아닌 초깃값을 가진 전역 변수나 정적 변수는 .data 섹션에 놓이며, 그 초깃값이 파일 안에 저장됩니다. 프로그램을 읽어 들일 때 이 내용이 그대로 메모리에 복사되므로 main이 시작되는 시점에 limit은 100입니다. .data는 실행 중에 바뀔 수 있으므로 읽기와 쓰기가 허용된 영역이 됩니다.

  • A. 올바릅니다. 초깃값 100을 파일에 가지고 있습니다.
  • B. .bss는 초깃값이 0이거나 지정이 없는 변수입니다.
  • C. .text는 코드 영역입니다.
이 분야 연습하기 분야로 돌아가기

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

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

이 분야의 비교