69,787
社区成员
发帖
与我相关
我的任务
分享
在大模型中查的这个问题的答案是:
系统会从内存获取变量的值
然后在寄存器中进行修改
最后写回内存
流程就是 内存->寄存器->内存
没有缓存吗?
而volatile关键字就是不使用寄存器的备份;而是获取内存的最新数据;如果是上面的流程 最新的数据应该在寄存器里啊?为什么又说寄存器里的是备份呢?
跪求大佬解释
1、不一定要通过读入寄存器来修改变量,可以直接修改内存,至少x86/x64的算术、移位等指令支持目标操作数为内存。
2、使用寄存器的备份的意思把数据保持在寄存器里,直接对寄存器里的数据进行操作,只在必要的情况下才写回到内存里,这需要假定变量读入寄存器之后不会被其他线程、中断之类的悄悄修改。
一个程序运行起来我们习惯上叫做一个进程。
一个进程自己运行,也不访问什么内存以外的资源,那么它几乎不需要volatile 。
实际上volatile的语义是为了在本进程和其他进程/其他硬件打交道时,定义和对方共享的内存单元用的——对方有可能随时修改该单元的内容。而本进程唯一能做的就是随时查看其内容,这个查看你得真的查看,不能相信前一秒取回来的放在本进程控制下的寄存器里的值。
每个月的发薪日,我的银行卡余额对于我这个主进程就是volatile的。