Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1465250
  • 博文数量: 842
  • 博客积分: 12411
  • 博客等级: 上将
  • 技术积分: 5772
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-14 14:43
文章分类

全部博文(842)

文章存档

2013年(157)

2012年(685)

分类: C/C++

2012-05-12 21:37:45




类型限定词volatile

参考资料:《C Primer PlusP347

 

限定词volatile

告诉编译器该变量除了可被程序改变以外还可被其他代理改变

      典型地,它被用于硬件地址和其他并行运行的程序共享的数据。

例如,一个地址中可能保存着当前的时钟时间,不管程序做些什么,该地址的值都会随着时间而改变。另一种情况一个地址被用来接收来自其他计算机的信息。

 

语法:

volatile int locl;       /*locl是一个易变的位置*/

volatile int *proc;    /*ploc指向一个易变的位置*/

这些语句声明了locl是一个volatile值,并且ploc是一个指向volatile值。

 

作用:可以方便编译器优化,如:

      val1 = x;   

/*一些不使用x的代码*/

      val2 = x;

      一个聪明的(优化的)编译器可能注意到你两次使用了x,而没有改变它的值。它将把x临时存储在一个寄存器中。接着,当val2需要x时,可以通过从寄存器而非初始的内存位置中读取该值以节省时间。这个过程被称为缓存(caching)。通常,缓存是一个好的优化方式,但如果在两个语句间其他代理改变了x的话就不是这样了。如果没有规定volatile关键字,编译器将无从得知这种改变是否可能发生。因此,为了安全起见,编译器不使用缓存。那是在ANSI以前的情形。然而现在,如果在生命中没有使用关键字volatile,编译器就可以假定一个值在使用过程中没有被修改,它就试着优化代码。

 

      一个值可以同时是constvolatile

      例如,硬件时钟一般设定为不能由程序改变,这一点使它称为const;但它被程序以外的代理改变,这使它称为volatile

      其声明如下:

      volatile const int loc

const volatile int *proc;

      constvolatile的顺序不重要~~

阅读(405) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~