C 베이스 상세 설명 volatile 키워드

volatile 키워드는 일부 컴파일러의 알 수 없는 요소에 의해 변경될 수 있음을 설명하는 형식 수식자입니다.volatile 키워드로 설명된 변수 i가 접근할 때마다 실행 위젯은 i에 해당하는 메모리 단원에서 i의 값을 꺼냅니다.
volatile 키워드로 설명하지 않은 변수 i는 접근할 때 cpu의 레지스터에서 직접 값을 얻을 수 있습니다. (이전에 i가 접근했기 때문에, 즉 이전에 메모리에서 i의 값을 꺼내 어떤 레지스터에 저장했기 때문입니다.) 메모리에서 값을 추출하지 않고 메모리에서 값을 얻는 이유는컴파일러 최적화 코드의 결과입니다.
상기 두 가지 상황의 차이는 어셈블리 코드로 컴파일된 후에 둘은 다르다는 데 있다.이렇게 하는 이유는 변수 i가 자주 변할 수 있기 때문에 특수 주소에 대한 안정적인 접근을 보장할 수 있기 때문이다.
volatile 키워드는 형식 수식자로서, 형식 변수는 일부 컴파일러가 알 수 없는 요소에 의해 변경될 수 있음을 나타낸다. 예를 들어 운영체제, 하드웨어, 또는 다른 라인 등이다.이 키워드가 설명하는 변수를 만나면 컴파일러는 이 변수에 접근하는 코드를 최적화하지 않고 특수 주소에 대한 안정적인 접근을 제공할 수 있습니다.
이 키워드를 사용하는 예는 다음과 같습니다.

  
  
  
  
  1. int volatile nVint; 

volatile에서 설명한 변수의 값을 사용하도록 요구할 때, 시스템은 앞의 명령이 방금 그곳에서 데이터를 읽었음에도 불구하고, 항상 자신이 있는 메모리에서 데이터를 다시 읽는다.그리고 읽은 데이터는 즉시 저장됩니다.
예를 들면 다음과 같습니다.

  
  
  
  
  1. volatile int i=10;  
  2. int a = i;  
  3. ...  
  4. // , , i  
  5. int b = i; 

volatile는 i는 수시로 변할 수 있으며, 사용할 때마다 i의 주소에서 읽어야 하기 때문에 컴파일러가 생성한 어셈블리 코드는 i의 주소에서 데이터를 다시 읽어 b에 넣는다.최적화 방법은 컴파일러가 i에서 데이터를 두 번 읽은 코드 사이의 코드가 i에 대해 조작을 하지 않은 것을 발견하면 지난번에 읽은 데이터를 자동으로 b에 놓는 것이다.다시 i에서 읽는 게 아니라이로써 i가 레지스터 변수이거나 포트 데이터를 표시하면 오류가 발생하기 쉬우므로volatile는 특수 주소에 대한 안정적인 접근을 보장할 수 있다.

좋은 웹페이지 즐겨찾기