while 和 for 构成的死循环的区别!!
来源:互联网 发布:淘宝香水小样正品店 编辑:程序博客网 时间:2024/05/15 23:53
看VC生成的汇编码,for比while要快一些。for(;;)是直接跳转,while多了两条指令而已。
不过C++标准里并未规定编译器的实现方式,非VC平台以及以后新版的VC二者速度相比如何还未可知。而且说句实话,我蛮讨厌for(;;)代替while(true)的。不直观。我也不在乎这么丁点儿效率。至少我写的程序中没遇到需要优化到这种程度的代码。
1. 两种循环在构造死循环时的区别
用while构造死循环时,一般会使用while(TRUE)来构造死循环;而用for来构造死循环时,则使用for(;;)来构造死循环。这两个死循环的区别是:while循环里的条件被看成表达式,因此,当用while构造死循环时,里面的TRUE实际上被看成永远为真的表达式,这种情况容易产生混淆,有些工具软件如PC-Lint就会认为出错了,因此构造死循环时,最好使用for(;;)来进行。
2. 两种循环在普通循环时的区别
对一个数组进行循环时,一般来说,如果每轮循环都是在循环处理完后才讲循环变量增加的话,使用for循环比较方便;如果循环处理的过程中就要将循环变量增加时,则使用while循环比较方便;还有在使用for循环语句时,如果里面的循环条件很长,可以考虑用while循环进行替代,使代码的排版格式好看一些。
===== 网络资料 =======
===== 实践 ====
1. 汇编代码 -- 在vc6.0中生成相应语句的汇编代码 DEBUG模式
//死循环
for (;;)
{
x = 1;
}
while (true)
{
x = 1;
}
// 变量循环
int y = 0;
for (int i = 0; i<10; i++)
{
y++;
}
i =0;
while (i<10)
{
y++;
i++;
}
对应的汇编语句为:
$L270:
; 对于for的真循环,没有判断语句,直接执行for循环体内数据
; x = 1
mov DWORD PTR _x$[ebp], 1
; for循环执行
jmp SHORT $L270
$L271:
; 对于while(true)循环,有3条汇编语句来判断
mov eax, 1
test eax, eax
je SHORT $L274
; x = 1
mov DWORD PTR _x$[ebp], 1
; 无条件跳转到判断语句开始位置
jmp SHORT $L271
$L274:
; 有条件循环开始
; for有条件循环开始 int i = 0
mov DWORD PTR _i$[ebp], 0
jmp SHORT $L277
; i自加 i++
$L278:
mov ecx, DWORD PTR _i$[ebp]
add ecx, 1
mov DWORD PTR _i$[ebp], ecx
; 判断条件 i<10
$L277:
cmp DWORD PTR _i$[ebp], 10 ; 0000000aH
jge SHORT $L279
; 进行y++操作
mov edx, DWORD PTR _y$[ebp]
add edx, 1
mov DWORD PTR _y$[ebp], edx
; 循环for
jmp SHORT $L278
$L279:
; 赋i的初值0
mov DWORD PTR _i$[ebp], 0
$L281:
; 进行条件判断 i<10
cmp DWORD PTR _i$[ebp], 10 ; 0000000aH
jge SHORT $L282
; 进行y++操作
mov eax, DWORD PTR _y$[ebp]
add eax, 1
mov DWORD PTR _y$[ebp], eax
; 进行i++操作
mov ecx, DWORD PTR _i$[ebp]
add ecx, 1
mov DWORD PTR _i$[ebp], ecx
; while循环跳转
jmp SHORT $L281
;由此可以看出,对于需要无条件进行循环的语句,优先采用for语句.
;而在进行变量循环时,for语句在初始化变量后有一条跳转操作,而while没有,这个应该跟vc编译器有关
;可以说应该在效率上没有多大差别,需要进一步进行大数据量操作
;同时,我对于各种语句操作的顺序是否有时间关联不是很清楚.
2. 大批量数据操作实验 -- 自加1000w次,然后再自减1000w次,看执行时间
实践发现对于千万级数据量,执行时间并没有差异
总结:
主要考虑程序的可读性和美观,对于效率问题,可以不用考虑差异性.
所以我比较推崇,在循环次数确定时,用for,不确定时,用while~~
以上本人转载的网路资料!!转自:http://huanyee.blog.sohu.com/76915823.html
我为什么找while和for死循环的区别呢!!
在看MSP430的例程中,老外好像都用for(;;)死循环,而不用while(1)死循环,所以本人研究了一下,对于普通PC机其实用哪个无关紧要,不差那点效率,while更直观些;但是对于单片机来说,有时还是很必要的!!至于怎么用还看具体情况,我看中国人好像比较习惯用while(1),有没有必要优化成那样,那就 仁者见仁智者见智了!!
源地址:http://blog.renren.com/GetEntry.do?id=479749222&owner=244306723
- while 和 for 构成的死循环的区别!!
- for循环和while循环的区别
- while循环和for循环的区别
- for循环和while循环的区别
- 循环结构(for循环和while循环的区别)
- while(1)和for(;;)两个死循环有什么区别
- For , while , do…while的死循环.
- for循环和它的while循环形式的区别
- for循环与while循环的区别和联系
- for 循环语句和 while 循环语句的区别
- 【C语言天天练(一)】while(1)死循环与for(;;)死循环的区别
- for循环跟while循环的区别
- for循环与while循环的区别
- while循环与for循环的区别
- for循环与while循环的区别
- for循环与while循环的区别
- for循环和do……while的区别
- for(;;)和while(1)两种死循环的区别
- 单链表(C++)
- 关于命运(详细娱乐诠释)
- 拍照声音framework
- 主题模型-LDA浅析
- C++处理异常技巧-try,catch,throw,finally
- while 和 for 构成的死循环的区别!!
- 中国贫富标准线
- NYOJ 613 免费馅饼【DP】
- FAILED TO FIND PROVIDER INFO FOR COM.……
- 总有一天你将破蛹而出
- JS的构造函数
- java中“=”的含义
- ibatis原理
- XCode 4.5.2实现SQLite简单操作