正文

立此存照 012005-06-28 13:24:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/bruceteen/2230.html

分享到:


主题:关于寄存器变量~
--------------------------------------------------------------------------------
楼主    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 哈
大家都是来学习的,不要以为自己比别人懂的多!  年轻人!
还有楼上的那位  你的理解力 是否是有很多人怀疑过啊??!!

阅读(3589) | 评论(2)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册