OneDev
[C] volatile 키워드 본문
◎ volatile 키워드
- 해당 변수를 최적화에서 제외 하도록 명령하는 키워드
- 외부 하드웨어와 통신할 때 주로 사용된다
- "volatile" 이란 단어는 "변덕스러운" 이라는 의미를 가지고 있는데, 변덕스럽게 변할 수 있는 값들에 대해 최적화 작업을 수행하지 말라고 컴파일러에게 명령한다고 생각하면 이해가 쉬울듯 하다
◎ syntax
volatile 키워드 사용을 위한 구문은 매우 간단한데, 변수 앞에 volatile 키워드를 붙여주기만 하면 된다
<< 예시 >>
#include <stdio.h>
typedef struct SENSOR {
/* 감지 안되면 0, 감지되면 1 이다.*/
int sensor_flag;
int data;
} SENSOR;
int main() {
volatile SENSOR *sensor; // 컴파일러는 더이상 sensor에 대한 최적화 수행 X
while (!(sensor->sensor_flag)) {
}
printf("Data : %d \n", sensor->data);
}
◎ volatile 키워드는 언제 쓰는지?
→ 컴파일러는 매우 똑똑해서, 우리가 작성한 소스코드를 우리의 의도와 다르게 바꿀(최적화) 가능성이 있다
→ 이런 경우 컴파일러에서 최적화를 사용하지 않는 쪽으로 옵션을 바꾸는 것이 1차 해결법이 될 수 있다
(Visual Studio → 프로젝트 속성 > C/C++ > 최적화 에서 "사용 안함" 선택)
→ 최적화 옵션을 끄는 순간 다른 모든 코드들도 최적화를 하지 않겠다는 의미가 되기 때문에 큰 손실이 발생할 수 있다
→ 이에 소스코드의 특정 부분에만 최적화 하지 않도록 하고싶을 때 volatile 키워드를 사용한다
'Language > C' 카테고리의 다른 글
[C] #pragma(pack, once, warning) (0) | 2023.08.14 |
---|---|
[C] typedef 키워드 (0) | 2023.08.14 |
[C] 24. 매크로 함수 & 인라인(inline) 함수 (0) | 2023.08.10 |
[C] memcpy (0) | 2023.08.01 |
[C] 23. 메모리 동적 할당(Dynamic Memory Allocation) - malloc, free (0) | 2023.07.31 |
Comments