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