본문 바로가기

공부/c언어

volatile과 restrict변수

반응형

volatile
컴파일러에게 변수의 값이 프로그램이 아닌 다른 매개체(하드웨적인면)에 의해서 변경될 수 있음을 알린다.
이 한정자가 사용되는 곳은 일반적으로 하드웨어 주소라든지 동시에 실행되고 있는 다른 프로그램
과의 공유되는 데이터입니다.
va11 = x;
va12 = x; 라고 했을떄 x값은 바뀌지 않은체 2번 사용된다. 컴파일러는 원래의 x의 레지스터에 가서 x라는 값을
읽어 오는데 만약 이때 x라는 값이 외부 요인(하드웨어)에 의해 변경 되었다면 va12에는 변경된 값이 들어가야 할텐데 컴퓨터는
volatile가 쓰여 있지 않은 변수에 대해서는 바뀌지 않는다고 가정하고 그대로 적용하고 코드의 최적화를 실행하기
때문에 반드시 volatile를 써줘서 x값을 나타내야 한다.

restrict
이 키워드는 오직 포인터에만 적용되는 키워드로 그 포인터가 데이터 객체에 접근할수 있는 유일하고도 최초가 되는 수단임을
나타낸다. 즉 포인터가 restrict로 한정되면 그 포인터가 가리키는 데이터 블록은 그 포인터만이 접근이 가능하다.

반응형