C++中volatie

volatie跟const一样,是类型修饰符
(1)修饰变量后,编译器对该访问该变量的代码不再优化
编译器对代码的优化
int main() {
int i = 0;
i++;
cout << “hello world” << endl;
}

按照代码,这个程序会在内存中预留int大小的空间,初始化这段内存为0,然后这段内存中的数据加1,最后输出“hello world”到标准输出中。但是根据这段代码编译出来的程序(加-O2选项),不会预留int大小的内存空间,更不会对内存中的数字加1。他只会输出“hello world”到标准输出中。
(2)volatile 在 C 以及 C++ 中,用于指示该变量属于硬件 I/O 地址。(换句话说就是,变量指向的地址会被程序以外的不可知作用改变,基本上在写驱动以及 BSP 以及一些硬件相关的代码的时候才会需要用到这个关键字。)
volatile虽然最常见的用处是用于中断涉及的变量,但多线程当中也是常用的,一个常见的例子叫做自旋(spin)锁,为了提高多核处理器上锁的效率,使用一个自旋变量,当锁无法获取时,首先循环一定次数检查自旋变量的值,从而判断锁是否被解开,如果短时间内锁被解开,就可以省去系统内核调用将线程挂起再唤醒的开销。这个自旋变量就必须设置为volatile,否则循环再多次都是读取寄存器中的值,不可能发生改变。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无敌秋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值