C语言中volatile在什么情况下使用

 我来答
2009001138
推荐于2017-10-15 · TA获得超过133个赞
知道答主
回答量:36
采纳率:0%
帮助的人:26.9万
展开全部
volatile是易变的,不稳定的意思,volatile是关键字,是一种类型修饰符,用它修饰的变量表示可以被某些编译器未知的因素更改,比如操作系统、硬件或者其他线程等,遇到这个关键字声明的变量,编译器对访问该变量的代码不在进行优化,从而可以提供对特殊地址的稳定访问。
volatile 关键字告诉编译器该变量是随时可能发生变化的,每次使用它的时候必须从内存中取出他的值,因而编译器生成的汇编代码会从原内存地址中读取数据使用。
如果一个寄存器或者变量表示一个端口或者多个线程的共享数据,就容易出错,所以volatile可以保证对特殊地址的稳定访问。
百度网友3e56fb68bfa
2012-04-03 · TA获得超过356个赞
知道答主
回答量:37
采纳率:100%
帮助的人:21.1万
展开全部
简单的说,你所定义的这个变量,在你程序运行过程中一直会变,你希望这个值被正确的处理,你就得每次从内存中去读这个值,这样就不会有错误了,这个volatile就是这个作用了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友25a9808b73
2019-05-20 · TA获得超过450个赞
知道答主
回答量:186
采纳率:60%
帮助的人:5.1万
展开全部
简单的理解就是这个变量可能会被外部函数改变,为了让这个改变能有效执行,不被编译器优化掉。
举个例子吧,一个函数用了一个外部的变量,但这个变量在此函数中没有改变,只是引用,这时候编译器会去做优化,把它的值暂放在内部寄存器中,用的时候读取的是寄存器的值,而不是去访问它的地址取值,这样的话,当这个变量在外部发生了变化的时候,比如中断,或者另外的进程等等。但在这个函数里面就不能起作用,因为被优化后使用的是寄存器的值,还是原来的值,导致错误发生。这种情况下,就要加上这个定义,就不会被优化了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式