C语言中volatile在啥情况下使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中volatile在啥情况下使用相关的知识,希望对你有一定的参考价值。

volatile是易变的,不稳定的意思,volatile是关键字,是一种类型修饰符,用它修饰的变量表示可以被某些编译器未知的因素更改,比如操作系统、硬件或者其他线程等,遇到这个关键字声明的变量,编译器对访问该变量的代码不在进行优化,从而可以提供对特殊地址的稳定访问。
volatile 关键字告诉编译器该变量是随时可能发生变化的,每次使用它的时候必须从内存中取出他的值,因而编译器生成的汇编代码会从原内存地址中读取数据使用。
如果一个寄存器或者变量表示一个端口或者多个线程的共享数据,就容易出错,所以volatile可以保证对特殊地址的稳定访问。
参考技术A 简单的说,你所定义的这个变量,在你程序运行过程中一直会变,你希望这个值被正确的处理,你就得每次从内存中去读这个值,这样就不会有错误了,这个volatile就是这个作用了。 参考技术B 简单的理解就是这个变量可能会被外部函数改变,为了让这个改变能有效执行,不被编译器优化掉。
举个例子吧,一个函数用了一个外部的变量,但这个变量在此函数中没有改变,只是引用,这时候编译器会去做优化,把它的值暂放在内部寄存器中,用的时候读取的是寄存器的值,而不是去访问它的地址取值,这样的话,当这个变量在外部发生了变化的时候,比如中断,或者另外的进程等等。但在这个函数里面就不能起作用,因为被优化后使用的是寄存器的值,还是原来的值,导致错误发生。这种情况下,就要加上这个定义,就不会被优化了。

c#sqlserver在啥情况下使用到groupby进行分组查询

参考技术A 需要对某个有重复值的字段进行分组汇总数据的时候
比如:有表a
name lesson score
张三 语文 90
李四 数学 95
张三 数学 88
我们查询每个人的总分的时候:
select name,sum(score) as totalscore
from a
group by name
结果:
name totalscore
张三 178
李四 95

以上是关于C语言中volatile在啥情况下使用的主要内容,如果未能解决你的问题,请参考以下文章

scanf与cin在啥情况下使用

说明 C# 中 volatile 关键字的用法

在啥情况下使用八进制?

在啥情况下我们需要在数据库中使用组合键

C语言关键词volatile的用法

在啥情况下(如果有),C 中前缀和后缀递增/递减运算符之间的性能是不是存在差异? [复制]