Public/tip & tech

[c언어] volatile

quantapia 2009. 5. 12. 17:50

volatile  지금까지 프로그램을 하면서 한번도 사용해 본적이 없는 키워드이다.

 

그럼 언제 사용하는가 ?

 

c프로그램은 컴파일 언어이기 때문에 c코드를 컴파일하게 된다.

이때 컴파일을 담당하는 컴파일러가 코드 수행의 성능 향상을 위해서 최적화를 하는데

이런 최적화를 못하도록 컴파일러에게 명시적으로 알려주는 키워드가 volatile이다.

 

어떤 변수가 있고 이 변수가 루프를 끝낼지 말지를 결정하는 변수일때

컴파일러가 이 변수는 메인메모리에서 읽어오지 않고 처음 로딩후 로컬 레지스터에 저장한후

다음부터는 이 로컬레지스터에서 읽어오게 되면 메인메모리에 변경된 값이 적용되지 않는 경우가 발생하여

프로그래머가 예상했던 동작과 다르게 동작할 수 있다.

 

보통(single 프로세스)의 프로그램환경에서는 발생하는 일이 없지만, 멀티 쓰레드나 멀티 프로세스 환경에서 이런 문제가 생긴다고 한다.

그럴 경우 컴파일러에게 "이 변수는 레지스터에서 저정하지 말고 필요할때마다 메인메모리에서 가져와라" 라고 알려주게 된다.