http://adrianhuang.blogspot.tw/2011/08/cvolatile.html
#include <stdio.h>
int square(volatile int *var)
{
return *var **var;
}
int main(void)
{
int var = 5;
printf("result: %d\n", square(&var));
return 0;
}
程式码我是看这网站
其问题在于square函式的平方算式,*var**var,此指令代表到var位址读取其内容。然而
,var位址可能储存硬件暂存器,这些暂存器内容会随时间而改变 (例如: 状态暂存器),
有可能第一次读取的时候为4, 下一次读取为5, 导致计算出来的值不正确。
可是前面又提到 凡牵涉读取该volatile变量的操作,保证会到该变量的实体位址读取,而不会读取CPU暂
存器的内容 (提升效能) , 这样这程式码变量加上 volatile 都会从内存取值,这样不是没问题?
怎么感觉讲法有冲突,还是我误解他意思?
他说正确解法是在square函式宣告一local变量
int square(volatile int *var)
{
int local_var = *var;
return local_var * local_var;
}
谢谢