링커, 로더, 실행 파일

C 언어에서 함수에 static을 붙여 정의했을 때(예: static int helper(void))의 효과로 올바른 것은?

  1. A그 함수는 프로그램 실행 중 계속 메모리에 남아 있지 않는다
  2. B그 함수는 파일 안에서만 보이며, 다른 파일에 같은 이름의 함수가 있어도 충돌하지 않는다
  3. C그 함수는 다른 어떤 함수보다 먼저 실행된다
정답과 해설 보기

정답: B. 그 함수는 파일 안에서만 보이며, 다른 파일에 같은 이름의 함수가 있어도 충돌하지 않는다

함수나 전역 변수에 static을 붙이면 내부 링키지가 되어, 심볼은 그 파일 안에서만 사용되고 다른 파일에서는 참조할 수 없게 됩니다. 이름 충돌을 막을 수 있을 뿐 아니라, 컴파일러는 그 함수가 다른 곳에서 호출되지 않는다는 것을 알 수 있으므로 인라인 전개나 사용되지 않는 함수의 삭제 같은 최적화도 하기 쉬워집니다.

  • A. 함수의 코드는 실행 중 계속 메모리에 있습니다.
  • B. 올바릅니다. 내부 링키지가 됩니다.
  • C. 실행 순서는 바뀌지 않습니다.
이 분야 연습하기 분야로 돌아가기

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

  1. C 언어에서 「extern int count;」라고 썼을 때의 의미로 올바른 것은?
  2. Linux 등에서 많이 쓰이는 ELF 형식의 파일에 대한 설명으로 올바른 것은?
  3. 실행 파일의 .text 섹션에 들어 있는 것은?
  4. C 언어에서 파일 바깥에 「int limit = 100;」이라고 쓴 전역 변수는 일반적으로 어느 섹션에 놓이는가?
  5. .bss 섹션의 특징으로 올바른 것은?

이 분야의 비교