对于这个关键字我们可能看了很多遍,确实也有很多写的很好的帖子,但是还是对这个关键字一知半解,因为这个知识点串联起来了很多不同的知识点,几乎每个知识点都是我们未知的领域,可能看到这个知识点之后对未知的没有去求解,这样的结果可能就是出现了新的问题之后,我们又对这个关键字进行了重新的定义。
对于比较官方的作用和说法是
一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量在内存中的值,而不是使用保存在寄存器里的备份(虽然读写寄存器比读写内存快)
其实这种说法很难理解处volatile到底是干什么用的。
这里可以看一下这一篇文章,写的很详细。
volatile详解(任何人都能懂的那种)_乌克兰水晶小乳猪的博客-优快云博客_volatile
上诉文章中,用汇编语句,改变内存里i的值,但是却不让编译器知道,就会发现在调试阶段,我们的编译器依旧会去内存里读取值,在release模式下,编译器对代码进行了优化,去寄存器里读取之前存储的值。
其中告诉了我们为什么要使用volatile,因为系统会把我们所写的局部变量,自动放在cpu 的寄存器里,有人就很好奇,为什么会自动放进寄存器里呢?因为读取寄存器里的变量比读取内存里的快,因为系统在某些时候,需要频繁的读取变量,如果这个时候每次都去内存里进行存取操作,就会耗费较多的时间,如果我们能够有效地利用CPU的寄存器,就会显著提升程序的运行效率。
所以为了防止我们的系统把我们所写局部变量自动添加到内存里我们一般会使用volatile进行声明。
由此可以得出寄存器变量是为了优化代码,提高程序的运行效率,而volatile是防止代码被优化,每次用到这个

最低0.47元/天 解锁文章
9561

被折叠的 条评论
为什么被折叠?



