Chinaunix首页 | 论坛 | 博客
  • 博客访问: 25540
  • 博文数量: 11
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 120
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-16 10:05
文章分类
文章存档

2011年(1)

2008年(10)

我的朋友
最近访客

分类: C/C++

2008-10-15 17:14:01

变量定义为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。
阅读(660) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~