C 메모

volatile 변수

빵맨. 2021. 3. 21. 18:58
728x90

volatile은 컴파일러 키워드

변수 선언시 volatile을 붙이게 되면 컴파일러는 해당 변수를 최적화 시키지 않음 (항상 해당 변수의 메모리에 접근)

 

● Example

int i;

while( i < 10 )

       i++;

: 컴파일러는 이 코드를 최적화하여 while 반복문을 없는 것으로 인지하고 i 변수에 10을 바로 할당해버리게 됩니다.
  ( 컴파일러의 종류에 따라 다를 수 있음 )

 

volatile int i;

while( i < 10 )

       i++;

: 하지만 volatile로 변수를 선언하게 되면 컴파일러는 항상 i라는 변수에 접근해야 하기 때문에 while 반복문을

10번 모두 수행하게 됩니다.

 

 

- 개인적인 생각으로는 레지스터의 주소에 직접 값을 할당할때 꼭 volatile 키워드를 붙여야 한다고 생각한다.

ex) volatile 미 선언시

char * Addr;

Addr = (char *)0x10000;

*Addr = 0x55;  // 생략됨

*Addr = 0xAA; // 컴파일러가 이것만 인식

 

ex) volatile 선언시

char * Addr;

Addr = (char *)0x10000;

*Addr = 0x55;  // 0x10000에 0x55 할당 됨

*Addr = 0xAA; // 0x10000에 0xAA 할당 됨

 

728x90