본문 바로가기

Computer/C

Volatile variable

얼마전에 이것에 대해 아냐고 저에게 물어봤습니다.
물론 몰랐습니다. ㅎㅎㅎ ㅠ.ㅜ 안 써본건 잘 모른다는...;
그래서 공부 시작.
네이버 지식 검색에서 찾은 정보를 종합하면

  Volatile variable 는 지역 변수를 선언할 때 레지스터 변수로 선언할 수 있는 경우에도 그렇게 선언하지 않고 반드시 메모리상의 변수로 만들어 처리하는 것입니다.
 다시 말하면 변수를 선언하면 메모리에 일정 공간을 차지하게 됩니다. 하지만 메모리에 읽고 쓰는 것은 느리고 CPU의 속도는 빠릅니다. 그 차이로 인해 CPU의 성능을 재대로 활용하지 못하게 됩니다. 그런데 CPU 내부에도 메모리처럼 사용할 수 있는 공간이 조금 존재하고 이것을 register 라고 합니다. 즉 많이 사용되는 변수는 이곳에 저장하면 속도가 더 빨라지게 되는 겁입니다.
 우리의 똑똑한 컴파일러는 컴파일을 할 때 자동으로 최적화를 시켜주는데, 그 중 하나가 register에 등록하는 것입니다. (참고. 수동 레지스트에 등록할 경우 register int x; 로 선언. 적은 수만 가능 )
 그리고 Volatile은 register 와 반대로 register에 등록되는 것을 방지 시키는 키워드 입니다.
 
 왜 이렇게 하는가?
 레지스터 변수의 경우 인터럽트 루틴과 같은 것으로 그 변수의 내용이 변할 수 있습니다. 이러한 경우를 막기 위해서 메모리에 변수를 선언하게 하기 위한 것입니다.

98% 이해는 했는데...
잘 모르겠네요. 써봐야지 알지. ㅎㅎ;

'Computer > C' 카테고리의 다른 글

Const (함수)  (0) 2010.02.22
Const (포인터)  (0) 2010.02.22