Chinaunix首页 | 论坛 | 博客
  • 博客访问: 129646
  • 博文数量: 46
  • 博客积分: 571
  • 博客等级: 准尉
  • 技术积分: 290
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-26 23:57
文章分类

全部博文(46)

文章存档

2012年(46)

我的朋友

分类: C/C++

2012-05-08 00:40:33

类型限定词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的顺序不重要~~

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

zh_hj2012-05-11 11:39:06

桔色花朵: 恩,小弟前来学习了~很不错.....
惭愧~都是摘录转载下来的,没什么个人见解。。

桔色花朵2012-05-10 21:32:40

恩,小弟前来学习了~很不错

zh_hj2012-05-10 11:37:06

我也是在遇到了这个东西时,才记下来的呢~

认真的鱼1232012-05-09 22:36:12

呵呵,这个东西平时没注意都~还不错