昨天看书时看到这样一句话:
    为了保证计数器不会被保存到一个寄存器里,可以声明g_nCount为volatile的变量请问:
    1。请教什么是volatile变量?
    2。若将一个变量存在寄存器里有什么特点?(此处好象是缺点)

解决方案 »

  1.   

    const 和volatile关键字改变指针是如何被对待的。const关键字指定指针在初始化之后不能被修改,指针从那以后是被保护的,不能被修改。volatile关键字指定其后的名称相关的值可以通过不是用户应用中的那些动作而进行修改,因此,volatile关键字对在可被多个过程访问的共享存储器中或与中断服务例程通讯用的全局数据区域中说明对象是非常有用的。当一个名称被说明为volatile时,编译器在它每次被程序访问时从存储器中重新装入其值,这极大地降低了可能的优化。但是当一个对象的状态可能出乎意料地改变时,它是确保程序可预言的执行的唯一方法。
      

  2.   

    1.msdn上有解释,这个用volatile修饰的变量具有不稳定性,这种变量除了可以被程序语句修改,还可以被操作系统,硬件,或并发的线程修改.
    用volatile修饰的变量无法被优化,因为其值随时可能改变......
    volatile的一个用途就是用于异步的进程对内存位置的访问比如中断函数
    2.用register修饰访问更快,比如一个多重循环可写这样写
    register int i;
    for(i=0;i<10000000000000;i++)
    {
    }