当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:55:00  来源:本站整理

<b>volatile关键字的阐明以及测试</b>[VC/C++编程]

赞助商链接



  本文“<b>volatile关键字的阐明以及测试</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

volatile关键字是一种范例修饰符,用它声明的范例变量表示可以被某些编译器未知的因素更改,比方:操作系统、硬件大概别的线程等.碰到这个关键字声明的变量,编译器对拜候该变量的代码就不再举行优化,从而可以供应对特别地址的安定拜候.

利用该关键字的例子以下:

int volatile nVint;
  当要求利用volatile 声明的变量的值的时刻,系统老是重新从它所在的内存读取数据,即便它前面的指令方才从该处读取过数据.并且读取的数据立即被保存.

比方:

volatile int i=10;
int a = i;
...
//其他代码,并未明确奉告编译器,对i举行过操作
int b = i;
  volatile 指出 i是随时大概发生改变的,每次利用它的时刻必须从i的地址中读取,因而编译器生成的汇编代码会重新从i的地址读取数据放在b中.而优化做法是,由于编译器发现两次从i读数据的代码之间的代码没有对i举行过操作,它会自动把上次读的数据放在b中.而不是重新从i里面读.这样以来,假如i是一个存放器变量大概表示一个端口数据就简单出错,所以说volatile可以保证对特别地址的安定拜候.

注意,在vc6中,普通调试情势没有举行代码优化,所以这个关键字的作用看不出来.下面通过插入汇编代码,测试有没有volatile关键字,对程序终究代码的影响:

首先,用classwizard建一个win32 console工程,插入一个voltest.cpp文件,输入下面的代码:

#include <stdio.h>
void main()
{
  int i=10;
  int a = i;
  
  printf("i= %d
",a);
  //下面汇编语句的作用就是改变内存中i的值,但是又不让编译器知道
  __asm {
    mov dword ptr [ebp-4], 20h
  }
  
  int b = i;
  printf("i= %d
",b);
}   
  然后,在调试版本情势运路程序,输出后果以下:

i = 10
i = 32
  然后,在release版本情势运路程序,输出后果以下:

i = 10
i = 10
  输出的后果明显表明,release情势下,编译器对代码举行了优化,第二次没有输出精确的i值.下面,我们把 i的声明加上volatile关键字,看看有什么改变:

#include <stdio.h>
void main()
{
  volatile int i=10;
  int a = i;
  
  printf("i= %d
",a);
  __asm {
    mov dword ptr [ebp-4], 20h
  }
  
  int b = i;
  printf("i= %d
",b);
}   
  辨别在调试版本和release版本运路程序,输出都是:

i = 10
i = 32
  这阐明这个关键字施展了它的作用!


  以上是“<b>volatile关键字的阐明以及测试</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .