栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【问题思考总结】为什么寄存器清零是在用户态进行的?

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【问题思考总结】为什么寄存器清零是在用户态进行的?

问题提出

在看到王道书上这个题的时候,我首先想到这个不是有很多寄存器是不透明的吗,因此不是应该用户态一定操作不了,甚至是管态都操作不了吗,基于这个思想,我进行了一定的查阅。

思考

经过查找发现,事实上如果想到了汇编的层面(但是这对我一个非科班学生没学过真的有点难唉,感慨学艺不精)就简单很多了。举一个最简单的例子:int i=0,这句代码实际上就是将一个寄存器里的值设为0,而这样的操作显然是很平常的操作,也完全用不到进入管态,因此是在用户态(目态)进行。

延伸思考 C语言细节

经过思考我又想到难道所有设置变量都是在寄存器中?可是寄存器是有限的啊,于是查找发现在C语言中用户可以自己定义寄存器变量如:register int i=0,这样的格式,而即便不这样做,编译器也可能会将变量存在寄存器中因为显然对于某些变量存在寄存器中可以极大提高系统的效率(比如经常使用的变量,在循环中的变量,基于局部性原理,这个括号内为个人猜想)。

寄存器细节

另外,为了证实寄存器可以存放变量,我又想起了程序员透明和程序员不透明这个知识点,经过查阅发现,通用寄存器是汇编程序员不透明,这也证实了之前的汇编层调用寄存器说法的真实性

参考资料

【1】http://www.cskaoyan.com/thread-7075-1-10.html
【2】https://blog.csdn.net/HumanpieceY/article/details/85917291

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/994473.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号