2017-10-13 2 views
1

휘도가 인 이유는 무엇입니까?C - 휘발성 포인터 사용

volatile int *pData; 

또는

volatile int * volatile pData; 
+0

가변 변수를 변경해야하는 이유는 알고 있습니까? – Yunnosch

+0

@Yunnosch은 컴파일러에게 변수가 언제든지 바뀔 수 있으므로 메모리에 보관해야한다는 것을 컴파일러에 알리는 데 사용된다는 것을 알고 있습니다.하지만 누군가가 휘발성 포인터를 사용하는 이유는 확실하지 않습니다. – Trey

+1

확실하게 강사가 예상합니다. (i) 강의 노트를 참조하십시오. (ii) 추천 독서 내용을 참고하십시오. 또는 (iii) 스스로 생각하십시오. (iii)의 경우, 당신은 적어도 당신의 사고 방식의 어떤 것을 제시 할 수 있어야합니다. –

답변

3

왜 하나는 휘발성을 만들 것입니다 : 그리고 이러한 목표를 달성 할 다음과 같은 선언의 휘발성 변수를 가리키는 휘발성 포인터를한다고 가정 바늘?

예 : 포인터가 백그라운드 프로세스에 의해 갱신되는 데이터에 액세스합니다.

2 개의 이 목표를 충족

Stuff * volatile VideoFrame; 
for (;;) { 
    Block_Changes(); 
    Stuff MyCopy = *VideoFrame; 
    Allow_Changes(); 
    Use(&MyCopy); 
} 

나는이 작업을 수행 할 다음과 같은 선언의 휘발성 변수를 가리키는 휘발성 포인터를 원한다. volatile int * volatile pData;은 다음과 같습니다
pData as volatile pointer to volatile int


1 volatile int *pData;는 휘발성 데이터에 대한 비 휘발성 포인터 :
pData as pointer to volatile int

volitle 키워드는 가장 자주 이러한 맥락에서 사용된다. @ Eugene Sh.

0

수정 기호 '휘발성'을 사용하는 한 가지 이유는 컴파일러가 변수를 존재하지 않게 최적화하지 않기 때문입니다.

수정 기호 '휘발성'을 사용하는 또 다른 이유는 코드가 해당 변수를 참조 할 때 일부 레지스터에 남아있는 값이 아닌 실제 변수에 액세스 할 때입니다.

'휘발성'수정자를 사용하는 또 다른 이유는 변수 값이 현재 프로그램의 제어 범위 밖에서 변경 될 수있는 경우입니다. 예를 들어 하드웨어 레지스터 또는 '인터럽트'가 응용 프로그램이 읽는 변수를 업데이트 할 때.