2016 - 2024

感恩一路有你

c语言 volatile关键字 C语言中volatile关键字的用法是什么?

浏览量:3061 时间:2021-03-17 12:00:13 作者:admin

C语言中volatile关键字的用法是什么?

Volatile提醒编译器,它后面定义的变量随时可能发生变化,因此每次编译的程序需要存储或读取变量时,它都会告诉编译器直接从变量内存地址读取数据,而不必优化变量,从而提供对特殊地址的稳定访问。。如果编译器暂时无法读取变量的值,那么它将与存储在其他寄存器中的值不一致。

代码示例:

int square(volatile int*PTR)

]{

int a,b

a=*PTR

b=*PTR

返回a*b

}

由于*PTR的值可能会意外更改,因此a和b可能不同。因此,此代码可能不是您期望的正方形!正确的代码如下:

long square(volatile int*PTR)

{

int a

a=*PTR

return a*a

}

]注意:频繁使用volatile可能会增加代码大小,降低性能,所以合理使用volatile。

volatile关键字在Java中有什么作用?

Volatile是为了防止指令重新排序以确保可见性

对于JVM级别,是为了防止编译器重新排序

同时,对于某些CPU,它们会通过缓存锁或线程来解决缓存可见性

但是,目前很多CPU已经过优化,由于cache一致性MESI会带来性能开销,因此采用storebuffer机制进行异步处理,这种机制会导致指令的无序执行。这会导致可见性问题。

然后volatile将在CPU级别增加内存屏障,以解决由CPU无序执行引起的可见性问题

c语言 volatile关键字 c volatile关键字的作用 c语言volatile的用法

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。