링커, 로더, 실행 파일

C 언어에서 초깃값을 쓰지 않은 지역 변수와 전역 변수의, 사용을 시작했을 때의 값에 대한 설명으로 올바른 것은?

  1. A둘 다 반드시 0에서 시작한다
  2. B지역 변수는 0에서 시작하지만, 전역 변수의 값은 정해져 있지 않다
  3. C전역 변수는 0에서 시작하지만, 지역 변수의 값은 정해져 있지 않다(불정)
정답과 해설 보기

정답: C. 전역 변수는 0에서 시작하지만, 지역 변수의 값은 정해져 있지 않다(불정)

전역 변수나 정적 변수는 .bss에 놓이고 프로그램 시작 시 0으로 채워지므로 0에서 시작합니다. 지역 변수는 함수가 호출될 때마다 스택 위에 만들어지며, 매번 0으로 채우면 시간이 걸리기 때문에 이전에 그 장소를 사용했던 데이터가 남아 있을 수 있습니다. 초기화하지 않은 지역 변수를 읽으면 결과가 실행마다 달라질 수 있으므로 반드시 초기화해서 사용합니다.

  • A. 지역 변수는 0으로 만드는 수고를 들이지 않으므로 불정입니다.
  • B. 반대입니다.
  • C. 올바릅니다. 놓이는 장소의 차이에 따른 것입니다.
이 분야 연습하기 분야로 돌아가기

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

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

이 분야의 비교