위키 백과에서는 이렇다고 한다
static int foo;
void bar(void)
{
foo = 0;
while (foo != 255);
}
이렇게 작성된 내용을
void bar_optimized(void)
{
foo = 0;
while (true);
}
컴파일러는 이렇게 최적화를 한다는 것
하지만 foo라는 값이 인터럽트 혹은 다른 스레드의 접근으로 인하여 값이 변경될 수 있는 것을 배제한 컴파일러의 행위로 인해, 여지가 사라지게 된 것이다.
따라서 Violatile로 선언된 변수는 컴파일러에게 해당 값이 언제나 변할 수 있다고 여지를 주어, 최적화를 하지 않도록 만들어준다.
시스템 개발을 하면서 봤던 변수인데 까먹어서 기록해 둔다