C++ volatile
变量定义为volatile,说明这变量可能会被意想不到地改变。
比如下面的程序:
long multiple(volatile int *pt)
{
return (*pt)*(*pt);
}
代码告诉编译器 *pt (而非pt)的值可能在其他地方被改变。所以程序运行中,每次读取*pt时,即便在高速缓存中命中,也要都要到内存中重新读取。
上述 (*pt)*(*pt)其实是读了两次*pt, 因此两次读到的值可能不一致,所以就不是求平方了。
需要修改为:
long multiple(volatile int *pt)
{
int a=*pt;
return a*a;
}
当结构或者对象使用volatile修饰的时候,他们所有数据成员都会被视为volatile。
比如下面的程序:
long multiple(volatile int *pt)
{
return (*pt)*(*pt);
}代码告诉编译器 *pt (而非pt)的值可能在其他地方被改变。所以程序运行中,每次读取*pt时,即便在高速缓存中命中,也要都要到内存中重新读取。
上述 (*pt)*(*pt)其实是读了两次*pt, 因此两次读到的值可能不一致,所以就不是求平方了。
需要修改为:
long multiple(volatile int *pt)
{
int a=*pt;
return a*a;
}当结构或者对象使用volatile修饰的时候,他们所有数据成员都会被视为volatile。


浙公网安备 33010602011771号