-
[volatile] 컴파일러! 나대지 마라개발/C·C++ 2021. 4. 27. 17:15
int some_int = 100; while(some_int == 100) { //your code }
이 프로그램이 컴파일될 때 some_int 변수가 절대 바뀔 수 없다고 판단되면 최적화가 일어납니다. 그 최적화는 while(true)라는 형태입니다. 최적화를 하지 않으면 반복문이 돌 때마다 some_int의 값을 불러와서, 100과 비교를 해야 하기 때문에 조금 느려질 수밖에 없습니다.
하지만 가끔씩, 최적화가 필요하지 않을 때도 있습니다. 컴파일러가 알지 못하는, 프로그램 외부의 누군가가 some_int를 바꾸게 되는 경우입니다. 이런 케이스에서는 컴파일러 최적화가 가치 있는 결과물을 만들어내지 못합니다. 때문에 컴파일러 최적화를 막고 싶다면 volatile 키워드를 사용합니다.
volatile int some_int = 100;
이는 다음처럼 설명해볼 수 있습니다.
volatile이 컴파일러에게 말합니다.
"이봐 컴파일러. 나는 volatile이야. 알다시피 나는, 너가 알지도 못하는 어떤 XYZ에 의해 변할 수 있어. XYZ는 무엇이든 될 수 있지. 프로그램이라는 행성 밖에 살고 있는 외계인일 수도 있어. 번개일 수도 있고 방해물일 수도 있으며 볼케이노일지도 몰라. 뭐가 됐든 나를 변화시키지. 아마도. 너는 누가 나를 바꿀지 알 수 없어! 그러니 이 무지렁이야, 신 놀음은 그만 둬. 내가 존재할 동안 감히 코드를 건드릴 생각은 하지 말라구"
출처>
stackoverflow.com/questions/4437527/why-do-we-use-volatile-keyword
'개발 > C·C++' 카테고리의 다른 글
[template] 왜 typename parameter에 0을 주나요? (0) 2021.04.30 [예외 처리] 너라고 예외는 아니야 (0) 2021.04.28 [const_cast] 제한적으로 활용하자 (0) 2021.04.27 [객체의 복사와 대입 연산자] 의도하는 동작이 있다면 구현하라 (0) 2021.04.26 [const member function] 이면에 있는 조금 더 복잡한 것 (0) 2021.04.22