C 및 C에서는 서로 다른 번역 단위 간의 이름 지정 충돌을 피하기 위해 실행 파일의 특정 세그먼트에 정적 변수가 할당됩니다. 제공된 코드의 foo.c 및 bar.c 파일과 같은 여러 소스 파일을 컴파일할 때 각 번역 단위는 자체 정적 변수 복사본을 생성합니다.
정적 변수가 저장되는 위치는 여부에 따라 다릅니다. 0으로 초기화되거나 초기화되지 않습니다. 0으로 초기화된 정적 변수는 .BSS 세그먼트에 배치되고, 0으로 초기화되지 않은 정적 변수는 .DATA 세그먼트에 배치됩니다.
주어진 예에서 foo와 bar는 모두 0이 아닌 값으로 초기화됩니다. 따라서 .DATA 세그먼트에 할당됩니다. 컴파일러는 이러한 변수를 위해 .DATA 세그먼트에 공간을 예약하고 해당 값은 여기에 저장됩니다.
실행 파일이 링크되면 .DATA 및 .BSS 세그먼트의 내용이 적절한 섹션에 복사됩니다. ELF 파일. .DATA 세그먼트는 일반적으로 .text(코드) 섹션으로 병합되는 반면, .BSS 세그먼트는 런타임 시 프로그램 메모리의 BSS 영역에 할당됩니다.
GCC 툴체인에서 정적 세그먼트의 위치는 변수는 ELF 섹션과 그 내용을 표시하는 -Xlinker -d' 옵션을 사용하여 검사할 수 있습니다. .data 및 .bss` 섹션을 검사하여 정적 변수의 할당을 확인하고 서로 충돌하지 않는지 확인할 수 있습니다.
위 내용은 C와 C에서 정적 변수는 어디에 할당됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!