当前位置: 首页 > news >正文

阿里做网站怎么做中山网红

阿里做网站怎么做,中山网红,山东建设网站广告,青浦网站建设volatile的本意是“易变的”,是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可…

volatile的本意是“易变的”,是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。

当要求使用volatile 声明的变量的值的时候,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。而且读取的数据立刻被寄存。例如:

volatile int i=10;int a = i;。。。//其他代码,并未明确告诉编译器,对i进行过操作int b = i;

volatile 指出 i是随时可能发生变化的,每次使用它的时候必须从i的地址中读取,因而编译器生成的汇编代码会重新从i的地址读取数据放在b中。而优化做法是,由于编译器发现两次从i读数据的代码之间的代码没有对i进行过操作,它会自动把上次读的数据放在b中。而不是重新从i里面读。这样以来,如果i是一个寄存器变量或者表示一个端口数据就容易出错,所以说volatile可以保证对特殊地址的稳定访问

#include <iostream>
using namespace std;int main(int argc,char* argv[])
{int i=10;int a=i;cout<<a<<endl;_asm{mov dword ptr [ebp-4],80}int b=i;cout<<b<<endl;
}

程序在VS2012环境下生成Release版本,输出结果是:
10
10

阅读以上程序,注意以下几个要点:

以上代码必须在Release模式下考查,因为只有Release模式下才会对程序代码进行优化,而这种优化在变量共享的环境下容易引发问题。
在语句b=i;之前,已经通过内联汇编代码修改了i的值,但是i的变化却没有反映到b中,如果i是一个被多个任务共享的变量,这种优化带来的错误很可能是致命的。
汇编代码[ebp-4]表示变量i的存储单元,因为ebp是扩展基址指针寄存器,存放函数所属栈的栈底地址,先入栈,占用4个字节。随着函数内申明的局部变量的增多,esp(栈顶指针寄存器)就会相应的减小,因为栈的生长方向由高地址向低地址生长。i为第一个变量,栈空间已被ebp入栈占用了4个字节,所以i的地址为ebp-i,[ebp-i]则表示变量i的存储单元。

加上volatile关键字

#include <stdio.h>void main(){volatile int i=10;int a = i;printf("i= %d/n",a);__asm {mov dword ptr [ebp-4], 20h}int b = i;printf("i= %d/n",b);}

在调试版本和release版本运行程序,输出都是:

i = 10

i = 32

 这说明这个volatile关键字发挥了它的作用!

总结:建议编译器不要对该变量进行优化

扩展问题:

1). 一个参数既可以是const还可以是volatile吗?解释为什么。

2). 一个指针可以是volatile 吗?解释为什么。
3). 下面的函数有什么错误:        
 

    int square(volatile int *ptr){return *ptr * *ptr;}

1). 是的。一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。
2). 是的。尽管这并不很常见。一个例子是当一个中服务子程序修该一个指向一个buffer的指针时。
3). 这段代码的有个恶作剧。这段代码的目的是用来返指针ptr指向值的平方,但是,由于ptr指向一个volatile型参数,编译器将产生类似下面的代码:

int square(volatile int *ptr){int a,b;a = *ptr;b = *ptr;return a * b;}

由于*ptr的值可能被意想不到地该变,因此a和b可能是不同的。结果,这段代码可能返不是你所期望的平方值!正确的代码如下:

     long square(volatile int *ptr){int a;a = *ptr;return a * a;}```

http://www.yayakq.cn/news/829521/

相关文章:

  • VPS做镜像网站环保主题静态网站模板
  • 心理咨询网站平台建设wordpress附件上传FTP
  • 森东网站建设邢台哪个公司做网站
  • 网站开发教科书网站seo外链接
  • 苏州做网站的搜狗友链交换
  • 网站建设公司网站模版做网站一定需要虚拟主机吗
  • 做emu对网站有什么要求外贸网站源代码下载
  • 网上做平面设计的网站大航母网站建设与运营
  • 牡丹江0453免费信息网站网站开发和推广方案
  • 大连信息网信阳seo推广
  • 云南网站建设快速排名专业网站建设平台代理商
  • wordpress建站入门建设单位招聘信息
  • 百度云如何建设网站网站建设管理是
  • 高性能网站建设指南pdf怎么做一个手机网站
  • 做网站用不用thinkphp松山湖短视频seo排名
  • 网站制作找哪家公司好wordpress不支持ie
  • 给网站网站做推广犯法整站优化昌吉可以吗?
  • 南昌建网站做优化公司怎样建商业网站
  • 潍坊奎文住房和城乡建设局网站企业门户网站的建设费用
  • 教学类网站开发建设手机网站赚钱吗
  • 网站安全维护做网站交互demo工具
  • 定西做网站建设网站和备案
  • 网站更换服务器 seo当下最流行的营销方式
  • 晋江市建设局网站关键词查询工具
  • 镇海区建设交通局网站进不去了教育网站建设的策划方案
  • 网站发布与推广计划重庆综合网站建设配件
  • 门户网站建设进展情况书店网站模板下载
  • 闽候县建设局网站临沧网站建设c3sales
  • 花卉电子商务网站开发征信网站开发
  • 做网站做图电脑需要什么配置营销网站的筛选