전역 또는 정적 C 변수가 명시적으로 초기화되지 않았지만 암시적으로 초기화된 경우 해당 변수가 .data 또는 .bss 섹션에 있습니까? [폐쇄]

전역 또는 정적 C 변수가 명시적으로 초기화되지 않았지만 암시적으로 초기화된 경우 해당 변수가 .data 또는 .bss 섹션에 있습니까? [폐쇄]

컴퓨터 시스템: 프로그래머의 관점에서는 ELF 재배치 가능 개체 파일의 두 부분을 소개합니다.

  • . 데이터전역 및 정적 C 변수가 초기화되었습니다. 로컬 C 변수는 런타임 시 스택에 유지되며 .data 또는 .bss 섹션에는 표시되지 않습니다.

  • .bss초기화되지 않은 전역 및 정적 C 변수, 그리고 0으로 초기화된 전역 또는 정적 변수. 이 섹션은 개체 파일에서 실제 공간을 차지하지 않으며 단지 자리 표시자일 뿐입니다. 개체 파일 형식은 공간 효율성을 위해 초기화된 변수와 초기화되지 않은 변수를 구별합니다. 초기화되지 않은 변수는 개체 파일의 실제 디스크 공간을 차지할 필요가 없습니다. 런타임 시 이러한 변수는 초기 값 0으로 메모리에 할당됩니다.

인용문에서 "초기화됨" 및 "단위화됨"이라는 단어는 명시적 또는 암시적을 의미합니까?

전역 또는 정적 C 변수가 명시적으로 초기화되지 않았지만 암시적으로 초기화된 경우 해당 변수가 .data 또는 .bss 섹션에 있습니까?

전역 또는 정적 C 변수가 암시적으로 0 또는 0이 아닌 값으로 초기화되는지 여부가 중요합니까?

.data 및 .bss 요구 사항은 상호 배타적이지 않습니다. "전역 및 정적 C 변수 초기화"에 대한 .data 요구 사항에는 해당 변수가 0이 아닌 값으로 초기화되어야 한다고 명시되어 있지 않습니다. 그렇다면 전역 또는 정적 C 변수가 0으로 초기화되면 .data 또는 .bss 섹션에 있어야 합니까?

감사해요.

답변1

인용문에서 "초기화됨" 및 "단위화됨"이라는 단어는 명시적 또는 암시적을 의미합니까?

"초기화됨"은 변수가 코드 선언 옆에 명시적인 값(0일 수도 있음)이 할당되었음을 의미합니다. "초기화되지 않음"은 변수가 선언될 때 명시적으로 초기화되지 않았음을 의미하며, 이는 전역 변수인 경우 해당 값이 0이라는 용어로 "암시적 초기화"에 해당합니다.

전역 또는 정적 C 변수가 명시적으로 초기화되지 않았지만 암시적으로 초기화된 경우 해당 변수가 .data 또는 .bss 섹션에 있습니까?

귀하의 견적을 바탕으로:

.bss초기화되지 않은 전역 및 정적 C 변수

다음:

전역 또는 정적 C 변수가 암시적으로 0 또는 0이 아닌 값으로 초기화되는지 여부가 중요합니까?

초기화되지 않은 전역 변수의 기본값은 0입니다.

그렇다면 전역 또는 정적 C 변수가 0으로 초기화되면 .data 또는 .bss 섹션에 있어야 합니까?

귀하의 견적을 바탕으로:

.bss초기화되지 않은 전역 및 정적 C 변수, 그리고 0으로 초기화된 전역 또는 정적 변수.

이 중 어느 것도 해당되지 않습니다.필요하다;특히, 초기화되지 않은 데이터 세그먼트는 C에서 0에 해당하는 값으로 플랫폼에서 초기화된다고 가정합니다. ; 이는 ELF를 사용하는 시스템에서 일반적이지만 C에서는 모두 0이 아닌 비트 패턴을 사용하여 0을 나타내는 것을 허용합니다.

.bss그러나 실제로는 명시적으로 또는 비명시적으로 0으로 초기화되는 전역 또는 정적 변수가 ELF 바이너리의 일부입니다.

관련 정보