volatile 关键字用法?不加就一定会出错?

2020-01-10 19:46发布

如题,一直有个疑惑,也没有问,volatile用法,既然不加不会出错(有一些变量确实不加也没问题),为什么要加?
24条回答
darkness27
1楼 · 2020-01-11 08:14.采纳回答
要看变量有没可能被中断或其他线程改变。如果有,而且这个变量被编译器优化过,那可能就导致它某次使用的时候使用缓存里的值而没有重新读取,然而真正的值已被改变过。这就出错了。
cloudboy
2楼-- · 2020-01-12 13:39
多看看编译出来的汇编代码,时间长了楼主你就懂了,基本上可以概括为“防止编译器自作聪明”
justdomyself
3楼-- · 2020-01-12 14:52
chun2495 发表于 2018-5-14 08:40
比如delay(){(i=0;i

对  是这样的
大傻师
4楼-- · 2020-01-12 15:08
 精彩回答 2  元偷偷看……
jameszxj
5楼-- · 2020-01-12 20:52
主要用于对寄存器的读写,没有volatile,CPU可能直接从cache取数据,不会执行对寄存器的操作。
还有一个就是8楼说的,有可能会被编译器优化。
guolun
6楼-- · 2020-01-13 01:16
我用IAR,几乎没有用过。
00superman00
7楼-- · 2020-01-13 06:47
谢谢各位解答

一周热门 更多>