programing

상수 대 정적 상수

closeapi 2023. 6. 10. 09:07
반응형

상수 대 정적 상수

컴파일러(예: GCC)가 어떻게 할당합니까?const그리고.static const변수, 예를 들어, 그것은 어디에 상주할 것입니까?데이터 메모리 또는 프로그램 메모리?

시스템과 변수를 사용하는 방법에 따라 다릅니다.위해서static변수:

사례 1: 변수를 사용하지 않고 컴파일러가 자동으로 삭제합니다.이는 다음과 같은 경우에 발생할 수 없습니다.extern변수

사례 2: 변수는 사용하지만 주소는 사용하지 않습니다.컴파일러는 변수의 사용을 즉시 피연산자로 변환합니다. 마치 그것이 그것이#define또는enum컴파일러가 여전히 변환할 수 있습니다.extern즉시 피연산자에게 정적이지만 어쨌든 주소를 찾아야 합니다.

사례 3: 변수를 사용하고 주소를 가져오면 컴파일러는 객체 코드에 넣을 장소를 찾아야 합니다. 정확히 말하자면,extern.

"데이터" 대 "프로그램" 메모리의 경우, 사용 중인 시스템에 매우 고유합니다.Linux x64/ELF 시스템에서는 아마도.rodata코드와 동일한 세그먼트에 들어가는 섹션(.text), 그러나 읽기-쓰기 데이터 섹션과 다른 세그먼트(.bss,.data). 시스템이 읽기 전용 실행 불가능한 데이터에 대해 별도의 세그먼트를 만들지 않는 것 같습니다.

부록:C++에서는 동작이 다릅니다.C++에서, aconst변수에는 기본적으로 내부 연결이 있습니다.static const중복 및extern const외부 연결을 사용하여 상수를 구하는 데 필요합니다.

디트리히는 이미 이 사건에 대해 설명했습니다.static변수 우물

로컬 변수의 경우 컴파일러 구현은 할당할 위치에 대해 몇 가지 선택권이 있습니다.const주소가 사용되는 한정된 변수입니다.스택 또는 정적 메모리에 할당될 수도 있고 할당되지 않을 수도 있습니다.이것은 특히 에 대한 경우입니다.const자격을 갖춘 복합 리터럴서로 다른 범위에서 로컬로 선언된 두 리터럴의 주소는 하나로 접힐 수 있으며 주소는 동일하게 비교될 수 있습니다.

언급URL : https://stackoverflow.com/questions/6381088/const-vs-static-const

반응형