星期五, 3月 10, 2017

[ C ] Volatile 用法


volatile是宣告這個變數有可能隨時被更改到,
所以請隨時去存取他的記憶體位置。

因為在做compiler最佳化時,有可能會修改你的code,
導致出來的結果會有問題。

int *pInt;
int i, j, k;

pInt = (int *)0x80000;
i = *pInt;
j = *pInt;
k = *pInt;

最佳化後可能變成,
i = j = k = *pInt ;

原本*pInt被存取了三次,最佳化後只要存取一次就可以,
但有可能一旦*pInt值受到更改時,那 i, j, k 還會是原本的值,
因為不會再跑去找*pInt的值。

所以使用volatile可以避免這問題,
跟compiler說不要對這個參數做最佳化,
讓他乖乖的去存取三次這個位址。



Ref
Ref_2

沒有留言: