Lesimyの備忘録

忘れっぽい脳のための忘備録

volatile

2020-06-13 10:08:50 | C言語

valatile や const は対象がポインタの場合に記述する位置により効果が異なる。

A) volatile int* aaa; // ポインタの指し示す先の内容に対して効力をもつ。
B) int* volatile aaa; // ポインタ(アドレス)に対して効力をもつ。

 

A)ではポインタ変数 aaa が例えば 0x00000100に割り当てられてその中身が 0x00008000である場合、アドレス0x00008000の内容に効果がある。

B)ではポインタ変数 aaa が例えば 0x00000100に割り当てられてその中身が 0x00008000である場合、0x00008000に効果があるのが B)である。

 

デバイスドライバや組み込みなどでは重大な意味を持つ。通常は A)のようにしてポインタ先に対して最適化されないようにする。デバイスのレジスタ等で外的要因により変化する場合や、割り込み内で書き換えるなどのケースでは最適化されると意図した動作にならずバグで悩むこことなる。