휘발성 키워드를 사용하는 이유는 무엇입니까? [복제]
중복 가능성 :
C ++ : 휘발성 키워드가 언제 도움이 되었습니까?
나는 그것을 사용한 적이 없지만 사람들이 왜 그것을 사용하는지 궁금합니다. 정확히 무엇을합니까? 포럼을 검색했는데 C # 또는 Java 주제 만 발견했습니다.
이 코드를 고려하십시오.
int some_int = 100;
while(some_int == 100)
{
//your code
}
이 프로그램이 컴파일됩니다 때 프로그램이 있음을 발견하면, 컴파일러는이 코드를 최적화 할 수 있습니다 결코 지금까지의 값을 변경하려는 시도를하게 some_int최적화하기 위해 유혹 할 수 있도록 while에서 변경하여 루프 while(some_int == 100)에 뭔가 에 해당합니다 while(true)그래서 while루프 의 조건 이 true항상 나타나기 때문에 실행이 빠를 수 있습니다 . (컴파일러가 최적화하지 않으면 some_int각 반복에서 값을 가져 와서 100과 비교해야합니다. 각 반복은 약간 느립니다.)
그러나 때로는 (프로그램의 일부의) 최적화 될 수있다 바람직하지 않은 그것을 다른 값 변화되는 사람이 될 수 있기 때문에, some_int에서 컴파일러가 인식하지 않는 프로그램 외부에서 그것을 볼 수 있기를,; 그러나 그것은 당신이 그것을 설계 한 방법입니다. 이 경우 컴파일러의 최적화로 원하는 결과를 얻지 못합니다 !
따라서 원하는 결과를 얻으려면 컴파일러가 while루프 를 최적화하지 못하게해야합니다 . 곳이다 volatile키워드는 역할을한다. 당신이해야 할 일은 이것입니다.
volatile int some_int = 100; //note the 'volatile' qualifier now!
다른 말로하면 다음과 같이 설명합니다.
volatile 컴파일러에게
"이봐 컴파일러, 나는 휘발성이고, 당신도 알지 못하는 일부 XYZ에 의해 변경 될 수 있습니다. XYZ는 무엇이든 될 수 있습니다. 아마도이 행성 외부의 어떤 외계인은 프로그램이라고 불릴 것입니다. 아마도 어떤 조명, 어떤 형태 일 것입니다 방해, 화산 등이 나를 변형시킬 수 있습니다 .. 아마도, 당신은 누가 나를 바꿀 것인지 알지 못합니다! ? "
이것이 volatile컴파일러가 코드를 최적화하지 못하게 하는 방법 입니다. 이제 웹을 검색하여 몇 가지 샘플 예를보십시오.
C ++ 표준에서 인용 ($ 7.1.5.1 / 8)
[..] volatile은 구현에 의해 감지 할 수없는 방법으로 객체의 값이 변경 될 수 있기 때문에 객체와 관련된 적극적인 최적화 를 피하기 위한 구현에 대한 힌트 입니다. [...]
관련 주제 :
구조체를 휘발성으로 만드는 것은 모든 멤버를 휘발성으로 만드는가?
컴퓨터 프로그래밍, 특히 C, C ++ 및 C # 프로그래밍 언어에서 volatile키워드로 선언 된 변수 또는 객체 에는 일반적으로 최적화 및 / 또는 스레딩과 관련된 특수 속성이 있습니다. 일반적으로 volatile키워드는 변수 값이 "자체적으로"변경할 수 없다고 가정하는 코드에 (의사) 컴파일러가 최적화를 적용하지 못하도록하기위한 것입니다. (c) 위키 백과
http://en.wikipedia.org/wiki/Volatile_variable
참고 URL : https://stackoverflow.com/questions/4437527/why-do-we-use-volatile-keyword
'development' 카테고리의 다른 글
| IntelliJ에서 현재 파일 찾기 (0) | 2020.03.03 |
|---|---|
| 루비의 디렉토리에서 모든 파일을 요구하는 가장 좋은 방법은 무엇입니까? (0) | 2020.03.03 |
| Swift를 사용하여 앱 버전 및 빌드 번호를 어떻게 얻습니까? (0) | 2020.03.03 |
| 다형성 vs 재정의 vs 과부하 (0) | 2020.03.03 |
| PHP에서 cURL을 사용하여 Tor 숨김 서비스에 연결하려면 어떻게해야합니까? (0) | 2020.03.03 |