programing

휘발성 구조 의미론

javaba 2022. 8. 13. 16:05
반응형

휘발성 구조 의미론

structure-type 변수의 인스턴스를 volatile로 선언하는 것으로 충분합니까(재엔트리 코드로 필드에 액세스하는 경우), 아니면 구조의 특정 필드를 volatile로 선언해야 합니까?

다른 표현으로 표현하면, 다음 사이의 의미적 차이(있는 경우)는 무엇입니까?

typdef struct {
  uint8_t bar;
} foo_t;

volatile foo_t foo_inst;

그리고.

typedef struct{
  volatile uint8_t bar;
} foo_t;

foo_t foo_inst;

포인터 타입 변수를 휘발성 변수(예: volatile uint8_t * foo)로 선언하는 것은 foo가 가리키는 값에 대한 설명은 하지 않고 컴파일러에게 변경할 수 있음을 알리는 것일 뿐이라는 것을 알고 있습니다.구조유형변수에 대한 유추여부는 나에게 명확하지 않다.

이 예에서는 두 가지가 동일합니다.하지만 이슈는 포인터를 중심으로 돌아간다.

일단은volatile uint8_t *foo;는, 가리키는 메모리가 휘발성이 있는 것을 컴파일러에 통지합니다.포인터 자체를 휘발성이라고 마크하는 경우는, 다음의 조작을 실시할 필요가 있습니다.uint8_t * volatile foo;

여기서 구조체에 휘발성 마크를 붙이는 것과 개별 필드를 표시하는 것의 주요 차이점을 알 수 있습니다.다음과 같은 경우:

typedef struct
{
    uint8_t *field;
} foo;

volatile foo f;

다음과 같이 동작합니다.

typedef struct
{
    uint8_t * volatile field;
} foo;

다음과 같은 것이 아닙니다.

typedef struct
{
    volatile uint8_t *field;
} foo;

volatile을 가진 구조를 선언하면 모든 구성원은 volatile이 됩니다.

언급URL : https://stackoverflow.com/questions/2044565/volatile-struct-semantics

반응형