vcmfc请进,关于你在12期《程序员》上回答while(true)与for(;;)的效率比较...

陈硕 2001-12-10 11:17:04
我在Borland C++ Builder 5.5 Free下做的测试:
int main()
{
int i = 0;
while(true){
if (i>10) break;
i++;
}

i = 0;
for(;;){
if (i>10) break;
i++;
}
}
编译得:
;
; int main()
;
push ebp
mov ebp,esp
;
; {
; int i = 0;
;
@1:
xor eax,eax
;
; while(true){
; if (i>10) break;
;
; EAX = i
@2:
cmp eax,10
jg short @4
;
; i++;
;
inc eax
jmp short @2 ;<<<****>>>
;
; }
;
;
; i = 0;
;
@4:
xor eax,eax
;
; for(;;){
; if (i>10) break;
;
; EAX = i
@5:
cmp eax,10
jg short @7
;
; i++;
;
inc eax
jmp short @5 ;<<<****>>>
@7:
xor eax,eax
;
; }
;
; }
;
@10:
@9:
pop ebp
ret
请注意有<<<****>>>标记的两行,我认为while(true)与for(;;)在BCB中效率是一样的,不知你在什么编译器下做的测试?
...全文
169 11 打赏 收藏 举报
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
gigix 2001-12-10
汇编麻麻的……不过借用cber的一句话:如果编译器不把这两种循环做成同样的代码,似乎也有点笨哦?
  • 打赏
  • 举报
回复
natureshuo 2001-12-10
gz.
  • 打赏
  • 举报
回复
kingofark 2001-12-10
关注。
  • 打赏
  • 举报
回复
陈硕 2001-12-10
我觉得,我开这个题目本身就很蠢。
  • 打赏
  • 举报
回复
陈硕 2001-12-10
myan:
最近我怎么老是往底层钻,唉,以后不玩这个了。

vcmfc:
搞DP、XP还早了点,我打算把STL用好了再说。
  • 打赏
  • 举报
回复
陈硕 2001-12-10
结帐!
  • 打赏
  • 举报
回复
vcmfc 2001-12-10


声明:我只是个FAQ的收集者,上述的问题是我收集的,本来我就一直在为自已做这项工作,这些是较经典的问题,由于以前较有时间,而且有基本的C++基础知识,所以CSDN请我帮他们做的这样的工作。好处是每月得到一本杂志(我已经打算明年不再做了,他们赠杂志的速度比蜗牛快一点点)。所以有好多的问题不是我回答的,是别人回答,我个人觉得不错将它们收集起来的。


对于这个问题的看法:如果编译器的优化打开,可能两者都没有区别,也有可能是有区别的,但我用VC观察,两者在VC上是有差别的,这个问题带有我个人的观点,但我想你不必沉于此,那里的区别是非常的小,我觉得你应该去研究一些高级的技术,像DP,XP等,那才是重点。




再重声:我只是个FAQ收集者,由于我的错误而带给你的错误的指导,我向你道歉。
  • 打赏
  • 举报
回复
myan 2001-12-10
唉,何必呢,何苦呢?
  • 打赏
  • 举报
回复
tohigh 2001-12-10
优化好象也要打引号的:)
  • 打赏
  • 举报
回复
类库 2001-12-10
和编译器有关的很难搞哦~~~~~~~~~~~~
  • 打赏
  • 举报
回复
Bowdom 2001-12-10
这好像和优化选项有关 我是在vc里试的 不开优化时while(true)汇编代码多一些
开优化后 for(;;)居然没有汇编代码!:( 真的 我也不知道为什么 那位再试试...
  • 打赏
  • 举报
回复
相关推荐
发帖
C语言
加入

6.6w+

社区成员

C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
申请成为版主
帖子事件
创建了帖子
2001-12-10 11:17
社区公告
暂无公告