关于 for(;;); 和while(1);的区别
(一)gcc编译后好看汇编代码发现无区别:
#include <stdio.h> int main(void) { #if 1 while(1) { } #else for(;;) { } #endif return 0; } $ gcc -E a.c -o a.i $ gcc -S a.i -o a.s //查看两个文件相应的汇编代码,发现是一样的; 都是直接 原地跳转的 .file "a.c" .text .globl main .type main, @function main: .LFB0: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 .L2: jmp .L2 .cfi_endproc .LFE0: .size main, .-main .ident "GCC: (Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609" .section .note.GNU-stack,"",@progbits
(二)Visual Studio 断点 发汇编跟踪发现 有区别: 代码size 和 执行速度, for死循环更好一些
//----------------------------------------------------------------------------- //汇编结果: 有 test 操作去判断while的条件 while(1) 00D013CE mov eax,1 00D013D3 test eax,eax 00D013D5 je wmain+29h (0D013D9h) { } 00D013D7 jmp wmain+1Eh (0D013CEh) system("pause"); 00D013D9 mov esi,esp //----------------------------------------------------------------------------- //汇编结果 无条件判断 执行会快一些 for(;;) { } 00FC13CE jmp wmain+1Eh (0FC13CEh) system("pause"); 00FC13D0 mov esi,esp
上一篇:
IDEA上Java项目控制台中文乱码