for(;;)和while(1)一样么?

bo_00 2011-10-17 10:24:44
for(;;)和while(1)动作一样么?
...全文
9901 82 打赏 收藏 转发到动态 举报
写回复
用AI写文章
82 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 5 楼 liu111qiang88 的回复:
他们的汇编实现是不一样的,因此效率也有一点差别。自己去探索一下。
++ PS: VC while (1)会报warning , for (;;)不会。 gcc没测试。
  • 打赏
  • 举报
回复
引用 35 楼 HONDELY 的回复:
[Quote=引用 15 楼 gdujian0119 的回复:] for(;;)编译成汇编后是无条件转移,while(1)是要0和1进行一下比较的,所以从这个方向上看for(;;)是要比while(1)快的因为少了一个比较指令,但现在的编译器都是有一定的优化能力的,像while(1)这种会优化成和for(;;)一样的汇编代码。 [/Quote] +++++
+10086
wjx5210 2013-10-25
  • 打赏
  • 举报
回复
在linux下进行了反汇编,代码完全一致,用time测试了一下,但是while就是比for要长(测试完while后紧接着测试for)。因为在虚拟机里试验,是不是time命令不太靠谱啊,每次占用的real不一样。
crazy1003 2012-11-26
  • 打赏
  • 举报
回复
引用 5 楼 liu111qiang88 的回复:
他们的汇编实现是不一样的,因此效率也有一点差别。自己去探索一下。
+1
xj34324 2012-11-26
  • 打赏
  • 举报
回复
引用 15 楼 gdujian0119 的回复:
for(;;)编译成汇编后是无条件转移,while(1)是要0和1进行一下比较的,所以从这个方向上看for(;;)是要比while(1)快的因为少了一个比较指令,但现在的编译器都是有一定的优化能力的,像while(1)这种会优化成和for(;;)一样的汇编代码。
学习了
pengyw 2012-11-26
  • 打赏
  • 举报
回复
实践是检验真理的唯一标准: VS2005, MFC dialog , Release,默认优化 // TODO: Add extra initialization here while(1); for(;;); 展开汇编后如下: // TODO: Add extra initialization here while(1); 004012A1 jmp CTestSomeCCPP_AboutDlg::OnInitDialog+0C1h (4012A1h) --- No source file ------------------------------------------------------------- 004012A3 int 3 004012A4 int 3 004012A5 int 3 004012A6 int 3 004012A7 int 3 004012A8 int 3 004012A9 int 3 004012AA int 3 004012AB int 3 004012AC int 3 004012AD int 3 004012AE int 3 004012AF int 3 --- e:\work\testsomeccpp_about\testsomeccpp_about\testsomeccpp_aboutdlg.cpp for(;;); ======= // TODO: Add extra initialization here for(;;); while(1); 展开后: // TODO: Add extra initialization here for(;;); 004012A1 jmp CTestSomeCCPP_AboutDlg::OnInitDialog+0C1h (4012A1h) --- No source file ------------------------------------------------------------- 004012A3 int 3 004012A4 int 3 004012A5 int 3 004012A6 int 3 004012A7 int 3 004012A8 int 3 004012A9 int 3 004012AA int 3 004012AB int 3 004012AC int 3 004012AD int 3 004012AE int 3 004012AF int 3 --- e:\work\testsomeccpp_about\testsomeccpp_about\testsomeccpp_aboutdlg.cpp while(1); ============== 由此可见亮点: 1编译器知道死循环后,后边的就没有生成汇编代码 2 while(1); for(;;); 在VS2005 release默认优化下是一样的; 那么,我顺便看看 for和while带循环体的 发现for()会有更多的运算
xxb249 2012-11-26
  • 打赏
  • 举报
回复
引用 15 楼 gdujian0119 的回复:
for(;;)编译成汇编后是无条件转移,while(1)是要0和1进行一下比较的,所以从这个方向上看for(;;)是要比while(1)快的因为少了一个比较指令,但现在的编译器都是有一定的优化能力的,像while(1)这种会优化成和for(;;)一样的汇编代码。
经常这样写while(1) 原因是简单,但是看了这个之后发现还是for效率高
wsyhy 2012-11-25
  • 打赏
  • 举报
回复
效果一样 ,速度不知道
mujiok2003 2012-11-25
  • 打赏
  • 举报
回复
等价。是不是等同取决于编译器。
yuxi201261 2012-11-25
  • 打赏
  • 举报
回复
对于底层,还是有点区别的
wizard_tiger 2012-11-25
  • 打赏
  • 举报
回复
路过,学习一下。
gao2545917920 2012-11-25
  • 打赏
  • 举报
回复
引用 15 楼 gdujian0119 的回复:
for(;;)编译成汇编后是无条件转移,while(1)是要0和1进行一下比较的,所以从这个方向上看for(;;)是要比while(1)快的因为少了一个比较指令,但现在的编译器都是有一定的优化能力的,像while(1)这种会优化成和for(;;)一样的汇编代码。
学习了
诚朴勇毅 2012-11-25
  • 打赏
  • 举报
回复
据efficient c++,for(;;)效率更高
常如意 2012-11-25
  • 打赏
  • 举报
回复
是一样的 见谭浩强C语言119页
  • 打赏
  • 举报
回复
推荐 for ( ; ; ) while (1) VC在 /W4时会有Warning,for (;;)就不会。
hu7324829 2012-11-22
  • 打赏
  • 举报
回复
while(1) 理论上多一次判断, 但是编译器一般都会优化它.. 基本上等价的..
nadleeh 2012-11-22
  • 打赏
  • 举报
回复
loop: goto loop;
mymtom 2012-11-22
  • 打赏
  • 举报
回复
不小心点进来了,还有点热闹啊!
li_rui_1220 2012-11-22
  • 打赏
  • 举报
回复
表示有点晕!!
  • 打赏
  • 举报
回复
while(1)比for(;;)多占一个字符的源代码空间
加载更多回复(61)

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧