개발자 면접 공부/C-C++

Volatile

chogyujin 2024. 4. 29. 13:11
728x90

1. 개요

오늘은 Volatile에 대해 공부하도록 하겠습니다.


2. Volatile?

Volatile 키워드는 컴파일러최적화를 하면 우리가 원치 않던 코드가 생기는데 이를 방지하고자 하는 키워드입니다. 예를들어 아래의 코드를 보면

MyStruct *mystruct;
while(!myStruct->flag))
{
    //some work
}

이러한 코드가 있을 경우 최적화를 하여

MyStruct * mystruct;
if(!myStruct->flag)
{
    while(1)
    {
        //some work
    }
}

이러한 코드로 컴파일러가 바꿔줍니다.

 

실제로 mystruct->flag가 만약 sensor값으로 언제 변할지 모르는 값이라고 할때 컴파일러의 최적화에 의해서 그런 변화를 감지하지 못하고 while 루프안에 갖혀버리는 현상이 발생됩니다.

따라서 이러한 경우 컴파일러 최적화 기능이 있으면 발생할수있는 오류를 volatile 키워드를 사용하여 예방할수 있습니다.

volatile MyStruct *myStruct;

다음과 같이 volatile 키워드를 붙여주면 컴파일러는 mystruct에 대해서 최적화 기능을 끄게 됩니다.

즉 외부 요인에 의해 변수값이 변경될 가능성이 있는 변수는 최적화 기능을 끄기 위해 volatile 키워드를 사용하는 것 입니다.


3. 장 단점

Volatile의 장 단점은 무엇일가요?

장점 단점
메모리 접근 보장 성능 저하
외부 변경 감지 오용 위험
멀티스레딩에서의 가시성 보장 제한된 최적화

4. Ref

https://mr-dingo.github.io/c/c++%EB%BD%80%EA%B0%9C%EA%B8%B0/2019/01/10/volatile.html

 

Mr dingo

A simple yet classy theme for your Jekyll website or blog.

mr-dingo.github.io