volatile 변수

YN_AP_MOC 2012. 6. 28. 15:44

http://ko.wikipedia.org/wiki/Volatile_%EB%B3%80%EC%88%98

 

이 키워드는 컴파일러의 재량을 제한하는 역할

volatile가 선언된 변수는 최적화에서 제외된다.

지정한 주소를 직접 액세스하는 방식을 지정할 수도 있다.

예)


static int foo;
 
void bar(void)
{
    foo = 0;
 
    while (foo != 255);
}

컴파일러는 다음과 같이 최적화한다.

void bar_optimized(void)
{
    foo = 0;
 
    while (true);
}

이렇게 되면 무한 루프가 된다.
최적화를 위해 다음과 같이 한다.

static volatile int foo;
 
void bar (void)
{
    foo = 0;
 
    while (foo != 255);
}
이렇게 하면 개발자가 의도한대로 기계어 코드가 생성된다.
이프로그램만으로는 무한루프라고 생각할 수 있지만,
만약 foo가 하드웨어 레지스터라면, 하드웨어에 의해 값이 변할 수 있다.
즉, 하드웨어 값을 poll(폴링)할때 사용한다.

Posted by KJKNOCK
,