Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ volatile 키워드란? 의미와 동작 원리 쉽게 이해하기

C++ volatile 키워드란?

C++에서 volatile은 컴파일러의 최적화를 제한하는 타입 한정자(type qualifier)로, 크게 두 가지 핵심 의미를 가집니다.

1. 코드와 무관하게 값이 변경될 수 있음

volatile로 선언된 변수는 개발자가 작성한 코드 외부의 요인(하드웨어 레지스터, 인터럽트 서비스 루틴, 다른 스레드 등)에 의해 언제든 값이 바뀔 수 있습니다. 따라서 컴파일러는 이 변수의 값을 읽을 때, 이전에 읽었던 값이나 마지막으로 저장했던 값을 재사용해서는 안 되며, 반드시 메모리에서 값을 다시 읽어야 합니다.

2. 값 저장은 외부에서 관찰 가능한 '부작용(side effect)'

volatile 변수에 값을 저장하는 행위 자체가 외부에서 관찰할 수 있는 부작용이기 때문에, 컴파일러는 이 저장 동작을 임의로 삭제하거나 생략할 수 없습니다. 예를 들어 같은 변수에 두 번 연속으로 값을 저장하더라도, 컴파일러는 실제로 두 번 모두 저장해야 합니다.

예제 코드

i = 2;
i = i;

위 코드에서 컴파일러는 숫자 2를 변수 i에 저장하고, 변수 i를 다시 읽은 후, 읽어온 값을 i에 다시 저장해야 합니다. 일반적인 변수라면 이런 중복 연산은 최적화 과정에서 제거되겠지만, volatile 변수는 그렇게 할 수 없습니다.

volatile이 필요한 대표적인 경우

  • 메모리 매핑 I/O처럼 하드웨어 장치와 직접 통신하는 변수
  • 인터럽트 서비스 루틴(ISR)과 메인 프로그램이 공유하는 변수
  • 멀티스레드 환경에서 여러 스레드가 접근하는 플래그 변수

volatile 키워드에 대한 더 자세한 내용은 아래 자료에서 확인할 수 있습니다.
Understanding Volatile Qualifier in C/C++ - GeeksforGeeks