Software/Programming2016. 4. 15. 02:43

본 자료는...


volatile이라는 정의의 의미


1.특정 최적화에 주의해라

2,.멀티 쓰레드 환경에서 주의해라


주로 C,C++이나 MCU의 레지스터를 다룰 때 1번의 의미로 사용되곤 하며

Java에서는 2번의 의미로 사용되곤 한다.


1.

옵티마이즈 기능에 의한 최적화를 시키지 않는다.


ex)


static int foo;
void bar(void)
{
    foo = 0;
 
    while (foo != 255);
}
와 같은 구문에서 최적화 옵션을 켜면, void bar내의 내용을 최적화 되어, while로 갈때는 항상 foo가 255가 아니라 0이기 때문에 

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


위와 같이 된다. foo에 volatile을 적용하면


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


위와 같이 최적화에 의한 생략과정이 발생하지 않는다.

Posted by 십자성군