c语言 修改变量值的底层流程是什么

迷茫的蜉蝣 2024-09-28 16:19:32

在大模型中查的这个问题的答案是:

系统会从内存获取变量的值

然后在寄存器中进行修改

最后写回内存

流程就是 内存->寄存器->内存

没有缓存吗? 

而volatile关键字就是不使用寄存器的备份;而是获取内存的最新数据;如果是上面的流程 最新的数据应该在寄存器里啊?为什么又说寄存器里的是备份呢?

跪求大佬解释

...全文
106 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

1、不一定要通过读入寄存器来修改变量,可以直接修改内存,至少x86/x64的算术、移位等指令支持目标操作数为内存。
2、使用寄存器的备份的意思把数据保持在寄存器里,直接对寄存器里的数据进行操作,只在必要的情况下才写回到内存里,这需要假定变量读入寄存器之后不会被其他线程、中断之类的悄悄修改。

forever74 09-28
  • 打赏
  • 举报
回复

一个程序运行起来我们习惯上叫做一个进程。
一个进程自己运行,也不访问什么内存以外的资源,那么它几乎不需要volatile 。
实际上volatile的语义是为了在本进程和其他进程/其他硬件打交道时,定义和对方共享的内存单元用的——对方有可能随时修改该单元的内容。而本进程唯一能做的就是随时查看其内容,这个查看你得真的查看,不能相信前一秒取回来的放在本进程控制下的寄存器里的值。
每个月的发薪日,我的银行卡余额对于我这个主进程就是volatile的。

69,612

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧