C++/C++
volatile 키워드
Elan
2021. 10. 3. 15:20
C++에서의 volatile키워드는 컴파일러에게 최적화를 하지 말아달라는 지시어에 불과하다.
혼동하지 말아야 할 것은 C#이나 Java의 volatile이 메모리 가시성 등 여러가지와 관련이 있지만,
C++에서는 단지 최적화를 막는 키워드에 불과하다는 점이다.
int a = 0;
a = 1;
a = 2;
a = 3;
std::cout << a;
컴파일러는 위의 코드를 어떻게 최적화 할까?
변수 a에 들어있는 값인 3을 받아와서 출력하는 부분 이전에 a에 다른 값을 대입해주는 명령들은 하등 쓸모가 없다고 생각한다.
그리고 a= 0; a=1; a=2; 부분을 지워버리고 int a=3; 으로 바꿔버린다.
사실 일반적인 프로그램이라면 이런 최적화가 당연하다.
하지만 의도적으로 어떤 메모리에 있는 값을 바꾸려 했을 경우에는 컴파일러 최적화가 이를 방해하는 것이 된다.
만약 특정 메모리를 모니터링하고 그에 따른 동작을 하는 임베디드 분야라면 이는 심각한 오류이다.
이를 방지하는 것이 바로 volatile 키워드이다.
아래와 같이 선언시 volatile을 붙여주는 것만으로 사용법은 끝이다.
volatile int a = 0;
a = 1;
a = 2;
a = 3;
std::cout << a;