상수 대 정적 상수
컴파일러(예: 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
'programing' 카테고리의 다른 글
Scikit 학습의 랜덤 상태(의사 난수) (0) | 2023.06.10 |
---|---|
모듈을 찾을 수 없음: 오류:'C:\dev\jszip-test\node_modules\jszip\lib'에서 '스트림'을(를) 확인할 수 없습니다. (0) | 2023.06.10 |
매개 변수로 사용되는 SQL 쿼리의 python 목록 (0) | 2023.06.10 |
3을 삽입할 때 "ORA-01438: 이 열에 대해 허용된 지정된 정밀도보다 큰 값" (0) | 2023.06.10 |
파일 텍스트에서 패턴을 검색하고 지정된 값으로 바꾸는 방법 (0) | 2023.06.10 |