正文

立此存照 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 哈 大家都是来学习的,不要以为自己比别人懂的多!  年轻人! 还有楼上的那位  你的理解力 是否是有很多人怀疑过啊??!!

阅读(3611) | 评论(2)


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

评论

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