Volatile 키워드
휘발성, 그 뜻 그대로 언제든지 그 값이 변할 수 있음을 의미합니다.
const 키워드와 함께 변수의 성질을 바꾸는 역할을 하는 타입 한정자입니다. 하지만, 그 사용빈도가 낮아 책이나 자료들에서도 잘 다루어지지 않는 키워드입니다.
- 타입 한정자 (const도 마찬가지) : 타입에 특정 속성을 더해주는 키워드
volatile 키워드가 지정된 변수는 최적화를 수행하지 않습니다.
변수의 최적화
변수의 최적화는 말 그대로 최적화를 시켜주는 컴파일러의 기능인데 프로그래머는 사람이기 때문에 실수를 하기 마련입니다.
- 물론 모든 잘못을 컴파일러가 보완 할 수는 없습니다.
예를 들면,
int a;
a = 0;
a = 1;
a = 3;
이런 식의 코드가 있다고 한다면, a에는 최종적으로 3의 값이 들어가게 되며 이전의 작업인 0과 1은 의미가 없게 됩니다. 따라서 재정의를 하는 경우에는 컴파일러가 알아서 위의 두 작업을 삭제합니다.
- 이를 통해 수행시간의 이득을 가져올 수 있습니다.
하지만,
만약 메모리를 참조하여 하드웨어에 명령을 내리는 코드라고 가정하고 a를 메모리 쓰기 변수라고 한다면
a = 0;
a = 1;
a = 3;
이라는 명령어 자체가 하나의 지시 기능을 가지게 될 것입니다.
따라서, a = 0;, a = 1; 의 두 작업이 최적화를 통해 없어진다면 0, 1에 해당하는 작업을 실행하지 못하게 될 것입니다.
이런 상황을 방지하고자 volatile 키워드가 존재하게 됩니다.
volatile int a = 0;
a = 0;
a = 1;
a = 3;
이렇게 선언하게 된다면, a = 0;, a = 1;, a = 3; 의 변수 대입 작업을 전부 실행하게 됩니다.
- 유사하게 하드웨어 메모리에서 변하는 값을 가져와 실행하는 변수들에도 volatile 키워드는 필수입니다.
즉, 외부 요인에 의해 변수 값이 변경될 가능성이 있는 변수에는 volatile을 써주셔야 합니다.
- Memory-mapped I/O
- 인터럽트 서비스 루틴
- 멀티 쓰레드 환경
등등..
사용빈도는 낮지만 상황에 따라서는 꼭 필요한 키워드입니다.
'Programming Language > C, C++' 카테고리의 다른 글
StrSafe 함수들 (0) | 2015.09.19 |
---|---|
C 데이터, 스택, 힙 영역 (0) | 2014.12.08 |
C++ 포인터와 레퍼런스의 차이 (0) | 2014.11.12 |
C++ malloc/free와 new/delete의 차이점 (0) | 2014.11.12 |
C++ 가상 함수 (virtual) - 가상 함수의 원리 (1) | 2014.11.07 |