반응형
[ volatile ]
변수를 선언할 때 앞에 volatile
을 붙이면 컴파일러는 해당 변수를 최적화해서 제외하여 항상 메모리에 접근하도록 만든다.
volatile int num1 = 10; // 변수를 최적화해서 항상 메모리에 접근하도록 만듦
volatile
로 선언한 변수는 사용할 때 항상 메모리에 접근한다. 즉, 이 변수는 언제든지 값이 바뀔 수 있으니까 항상 메모리에 접근하라고 컴파일러에게 알려주는 것이다.
예를 들면 다음과 같은 반복문이 있다.
int i = 0;
while(i < 10) i++;
printf("%d\n", i); // 10
=> 컴파일러는 이 코드를 최적화하여 while
반복문을 없애버리고 i에 그냥 10을 할당해 버린다.(Visual Studio의 /02
옵션, GCC의 -03
옵션)
// 대략 이런 모습이 되는 것이다.
int i = 10; // 반복문 없애버리고 10을 할당
printf("%d\n", i); // 10
여기서 i를 volatile
로 설정하면 반복할 때마다 항상 i의 메모리에 접근해야 하므로 컴파일러는 while
반복문을 없애지 않는다.
volatile int i = 0; // volatile로 선언하여 항상 메모리에 접근하도록 만듦
// 항상 i의 메모리에 접근해야 하므로 컴파일러는 반복문을 없애지 않음
while(i < 10) i++;
printf("%d\n", i); // 10
반응형
'프로그래밍 언어 > [ C ]' 카테고리의 다른 글
[ C ] 17. 연결리스트 구조체 ( Linked List ) (0) | 2020.11.30 |
---|---|
[ C ] 15. 공용체 (0) | 2020.08.15 |
[ C ] 14. goto에 관하여 (0) | 2020.08.14 |
[ C ] 13. 함수 포인터 배열 활용하기 (0) | 2020.08.14 |
[ C ] 12. 함수와 가변인자 (0) | 2020.08.14 |