[C/C++]写出几个无限循环

1. 写出几个死循环

while (1) {

}

注:1不可省略

for ( ; ; ) {

}
注:第一个条件为初始条件,第二个条件是循环结束条件,第三个表达式是变更表达式

     循环结束条件若是省略的话,应写入循环体中。此时循环体中没有结束条件(此时程序已进入循环),故程序将一直执行。。。



for(;;)编译成汇编后是无条件转移,while(1)是要0和1进行一下比较的,所以从这个方向上看for(;;)是要比while(1)快的因为少了一个比较指令,但现在的编译器都是有一定的优化能力的,像while(1)这种会优化成和for(;;)一样的汇编代码。

gdb的disassemble functionname命令:(for (;;))

(gdb) disassemble main 
Dump of assembler code for function main:
   0x080483ec <+0>:	push   %ebp
   0x080483ed <+1>:	mov    %esp,%ebp
   0x080483ef <+3>:	jmp    0x80483ef <main+3>
End of assembler dump.


(while(1))

Dump of assembler code for function main:
   0x080483ec <+0>:	push   %ebp
   0x080483ed <+1>:	mov    %esp,%ebp
   0x080483ef <+3>:	jmp    0x80483ef <main+3>
End of assembler dump.

果然一样的汇编代码!

#########################################################

不过,这是怎么弄出来的? 不一样啊!

	while (1)
00D5138E  mov         eax,1 
00D51393  test        eax,eax 
00D51395  je          main+29h (0D51399h) 
		;
00D51397  jmp         main+1Eh (0D5138Eh) 

	for ( ; ;)
		;
00D51399  jmp         main+29h (0D51399h)


第三种方法用goto:

loop:

.....

goto loop;



注:三种获取汇编代码的方法(http://wenku.baidu.com/link?url=hAqeZYHNdl9AYQqDIFyXby1-RoRJtR3wjKvnis_kTFy4jAeqYuP7bX4BFB5CV7GfKrzyOqEfgjhyfQtu6io1RCtvzg0nmtqmCosfYjQ8nMO###)

1. $gcc -S test.c

gcc编译有四步走,预编译,编译,汇编,连接


2. $gdb test

    $disassemble 函数名

查看相应代码段的汇编代码!


3.$objdump -d test.o或test


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值