主题:关于寄存器变量~
--------------------------------------------------------------------------------
楼主 shengaa
用寄存器变量的目的是为了提高运行速度,但是在用之前要先判断CPU寄存器是否有空,那么这个判断不是也额外增加了开销了么?? 这样运行速度不是等于没有提高么?? 不解~~~
--------------------------------------------------------------------------------
第1楼 bruceteen
呵呵,是编译时判断的。
--------------------------------------------------------------------------------
第2楼 shengaa
既然是编译时判断的,那生成可执行程序后,在运行时不是还要判断寄存器是否有空闲的么,不会在程序运行时就不判断了吧?就直接根据编译时判断的结果----把变量放在寄存器或者内存中?? 要是在编译的时候 寄存器有空,在运行可执行程序的时候,寄存器没空,那怎么办??
--------------------------------------------------------------------------------
第3楼 euclid
可能编译器隐藏了一些代码,如果不空则原寄存器的内容进栈保存先~象汇编
--------------------------------------------------------------------------------
第4楼 shengaa
所以说运行时还是要做出额外的开销的嘛
这样不就违背了用寄存器变量的原意了么
--------------------------------------------------------------------------------
第5楼 euclid
你从哪里知道寄存器变量的愿意?自己臆造的吧。声明普通变量时开销可能更大。晕
这主要是操作系统的活儿
--------------------------------------------------------------------------------
第6楼 FancyMouse
判断寄存器是否为空这个开销可以忽略不计
--------------------------------------------------------------------------------
第7楼 shengaa
五楼的! 用寄存器变量 不就是为了快么? 难道你不知道??!!
操作系统的活? 我们就不要管了么?? 我才晕啊!
--------------------------------------------------------------------------------
第8楼 euclid
用寄存器变量 不就是为了快么? 难道你不知道??!!
哈哈,按你的意思不要寄存器虽然慢点也可以咯??哈,不要钻牛角尖
--------------------------------------------------------------------------------
第9楼 shengaa
我可没这意思啊,你牛!什么意思都被你看出来了!
我只是想深入了解一下,寄存器变量在编译成可执行程序后,是否需要判定寄存器是否空! 呵呵
六楼的答案 倒是令我蛮信服的!
--------------------------------------------------------------------------------
第10楼 euclid
晕,还是多看书吧
--------------------------------------------------------------------------------
第11楼 shengaa
呵,就是书上说的很少 所以才要问高人的啊
你是么?
--------------------------------------------------------------------------------
第12楼 bruceteen
:)哎,这么简单的问题竟然没人知道,我真的很晕
比如代码
xxxxxx;
reg int abc;
yyyyy;
这段代码是编译器编译的,它在其间用到那些寄存器它不知道?比如
mov ax, 9
add ax, 12
那么它就可以确定还有bx可以使用,为什么要到运行时判断?
--------------------------------------------------------------------------------
第13楼 shengaa
!
--------------------------------------------------------------------------------
第14楼 shengaa
就是说是否用寄存器 在编译阶段确定!? 呵呵 那是否确定有什么意思呢??!
--------------------------------------------------------------------------------
第15楼 benb
寄存器在cpu内部
学过汇编就知道常用的存放数据的寄存器有ax,bx,cx,dx
而一般变量是放在内存中的。
cpu查询自己内部的寄存器是否为空基本不需要时间,可能不到一个cpu周期
而查询并读取内存中的变量却需要不知多少个cpu周期?
这样速度就差很多了。
--------------------------------------------------------------------------------
第16楼 cmaster
你要去北京,身上衣服有10个口袋,非要到了北京才知道会有个空口袋?
--------------------------------------------------------------------------------
第17楼 shengaa
晕 关键是在没去北京前 你穿的是T恤 去后穿的是衬衫!! 编译时 和 编译成可执行程序后 环境变了 老大!
--------------------------------------------------------------------------------
第18楼 bruceteen
to benb:
I 服了 you,你的瞎扯看起来还像模像样,真的令人忍俊不住。
请问“cpu查询自己内部的寄存器是否为空”的指令是哪条?
--------------------------------------------------------------------------------
第19楼 yxz149
寄存器不够用时,编译器就把register变量变为普通的变量类型了,即存在内存中,这是编译器的工作。
尽管有些开销,但是相比之下,如果能成为register变量,理论上速度比在内存中的变量访问要快很多!
--------------------------------------------------------------------------------
第20楼 shengaa
唉 始终 没有哪个 能深入地分析一下啊 19楼所说的大家是都知道的,但是
本人始终想不通的一点 就是-------------
比如 a 声明为register变量,编译时 编译器发现有个寄存器空着,那么它把a作为register变量。 那么 我想知道的是 在代码编译成可执行程序后,以后无论何时运行这个程序,是不是变量a还是作为register变量? 要是这样的话,假如运行程序的时候,CPU无空的寄存器,那怎么办?
--------------------------------------------------------------------------------
第21楼 euclid
sb 学完汇编再来吧~ 谁也不听你扯淡拉
--------------------------------------------------------------------------------
第22楼 yxz149
想想也知道吧?如果寄存器用完了,那你变量就没地方放了么?那你的程序就会运行不了了么?
看来你一点都不懂编译原理
--------------------------------------------------------------------------------
第23楼 shengaa
sb 学完汇编再来吧~ 谁也不听你扯淡拉
汇编我可能不比你差~~ 呵
呵呵 看来是我表达不好呢 还是有人智商那个??
算了 本来以为有谁真能懂点底层的知识的。 没想到引来了几个真真的SB 哈
大家都是来学习的,不要以为自己比别人懂的多! 年轻人!
还有楼上的那位 你的理解力 是否是有很多人怀疑过啊??!!
正文
立此存照 012005-06-28 13:24:00
【评论】 【打印】 【字体:大 中 小】 本文链接:http://blog.pfan.cn/bruceteen/2230.html
阅读(3589) | 评论(2)
版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论