2012. 7. 13. 14:49

메모리 변수(Volatile variable)는 지역 변수를 선언할 때 레지스터 변수로 선언할 수 있는 경우에도 그렇게 선언

하지 않고 반드시 메모리상의 변수로 만들어 처리합니다.

그러면 "할 수 있다면 빠른 레지스터 변수를 사용하는게 더 낫지 않느냐?" 라는 반론이 제기될 수 있는데요,

일반적으로 메모리 변수는 인터럽트 루틴등의 변수에 사용합니다.

레지스터 변수인 경우에는 인터럽트 루틴에서 그 변수의 내용을 바꾼 경우, 레지스터에 있는 값을 바꾼 것이므로

언제 그 레지스터의 값이 없어질지 알 수 없으므로 이런 경우에는 반드시 메모리에 변수를 선언하게 하기 위해서

volatile을 사용하는 것입니다.



예를 들어서,

volatile int cnt;

는 cnt라는 정수형 변수를 레지스터 변수로 선언할 수 있어도 그렇게 하지 않고 메모리에 선언하라는 뜻입니다.

-------------------------------------------------------------------------------------

volatile로 선언된 변수는 하드웨어에 의해 변경 가능 하지만 코드에 의해 변경할 수는 없다

'Language > C & C Plus' 카테고리의 다른 글

[C++] 함수포인터(간단한 예제)  (0) 2012.07.13
[C] #pragma 정리  (0) 2012.07.13
[C] 주소연산자(&)와 포인터연산자(*)  (0) 2012.07.13
[C] Double Linked list  (0) 2012.07.13
[C] Function key 입력 받기  (0) 2012.07.13
Posted by 몰라욧