返回信息流如题,以及,是不是所有的局部变量在运算中都会转到寄存器中再读取运算。
这是一条镜像帖。来源:北邮人论坛 / cpp / #100334同步于 2020/9/30
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
请教一下,全局变量为什么不会放在寄存器中
ye2016111062
2020/9/30镜像同步10 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
寄存器是有限的,只有程序执行时,根据指令来将地址或值放入寄存器参与运算。全局变量是在数据段中保存,局部变量一般会在栈中,参与运算时通过一定的寻址方式,来访问存储器中具体变量的值。
ls c++学得很透彻,一看就有很强的汇编,计算机原理,c++的基础。
【 在 yuluo5 的大作中提到: 】
: 寄存器是有限的,只有程序执行时,根据指令来将地址或值放入寄存器参与运算。全局变量是在数据段中保存,局部变量一般会在栈中,参与运算时通过一定的寻址方式,来访问存储器中具体变量的值。
兄弟过奖了,没那么夸张,还是菜鸡一枚,就是从汇编来谈的,能对底层有很好的认识[ema3]
【 在 nvyoujiaren (北邮颜值前三,骗你是小狗) 的大作中提到: 】
: ls c++学得很透彻,一看就有很强的汇编,计算机原理,c++的基础。
竟然是北邮颜值王[ema9]
【 在 nvyoujiaren (北邮颜值前三,骗你是小狗) 的大作中提到: 】
: ls c++学得很透彻,一看就有很强的汇编,计算机原理,c++的基础。
多线程的情况下,不同线程可能会访问同一个全局变量。
切换线程的时候,寄存器的值也会切换。
如果全局变量放在了寄存器内,其他线程读全局变量的时候会读到脏数据
个人愚见,这里应该是线程间的同步问题,不同线程对同一资源的处理,通过锁等机制来解决。线程切换,涉及到的寄存器等上下文环境都会保存起来的
【 在 a912655391 (QTAQ) 的大作中提到: 】
: 多线程的情况下,不同线程可能会访问同一个全局变量。
: 切换线程的时候,寄存器的值也会切换。
: 如果全局变量放在了寄存器内,其他线程读全局变量的时候会读到脏数据
总感觉这本书的标题和解释有点不相关。
全局变量的坏处破坏可读性,封装性;初始化顺序也可能造成程序bug,这些才是重要的吧。
具体到实现,上下文都没说,是多线程还是异步,对全局变量影响也不一样。