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
沒有留言:
張貼留言