设为首页收藏本站优领域

优领域

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
优领域 优领域 IT领域 编程开发 C语言 查看内容

类型限定词volatile

2012-5-11 09:17| 发布者: sky| 查看: 565| 评论: 0

摘要: 限定词volatile 告诉编译器该变量除了可被程序改变以外还可被其他代理改变。 典型地,它被用于硬件地址和其他并行运行的程序共享的数据。 例如,一个地址中可能保存着当前的时钟时间,不管程序做些什么,该地址的 ...
限定词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,编译器就可以假定一个值在使用过程中没有被修改,它就试着优化代码。
   
    一个值可以同时是const和volatile.
   
    例如,硬件时钟一般设定为不能由程序改变,这一点使它称为const;但它被程序以外的代理改变,这使它称为volatile.
   
    其声明如下:
   
    volatile const int loc;
   
    const volatile int *proc;
   
    const、volatile的顺序不重要~~

相关阅读

网站统计|优领域|优领域 ( 粤ICP备12011853号-1 )  

GMT+8, 2019-8-23 21:38 , Processed in 0.076534 second(s), 12 queries .

Copyright © 2008-2014 优领域

回顶部