한번 정해지면 절대 바뀌지 않을 값들
constant의 약자인 const를 붙임 (변수를 상수화한다고 함)
const를 붙였으면 초기값을 반드시 지정해야 함
const int AIR = 0;
const int STUN = 1;
const int POLYMORPH = 2;
const int INVINCIBLE = 3;
flag = (1 << INVINCIBLE);
flag |= (1 << POLYMORPH);
INVINCIBLE = 5; <- 컴파일 에러
전역 변수
데이터 영역
data (초기값 있는 경우)
int a = 2;
.bss (초기값 없는 경우)
int b;
.rodata (읽기 전용 데이터)
const char* msg = "Hello World";
msg 변수는 data 영역에 정의되지만, "Hello World"는 읽기 전용 데이터 영역에 정의되고, msg 변수는 그곳을 가리킨다.
함수 내부에서 임시적으로 저장하고 싶은 값들에 대해
스택에서 메모장처럼 사용하는 부분이 있다.
(함수 내에 정의한 변수)
const도 바뀌지 않는 읽기 전용(.rodata)?
C++ 표준에서 꼭 어떻게 하라는 말이 없음
그냥 컴파일러 (VS) 마음이라는 것
const 변수를 .rodata에 저장할 수도 있겠지만,
컴파일러가 모두 상수로 치환할 수 있다.
단, const 변수라도 함수 내부에 선언한다면, 스택 영역에 정의됨. // 선언과 정의의 차이는 "메모리를 할당하는가"