虽然(1)真的无限吗?

时间:2014-03-19 23:59:58

标签: c loops

我有这个程序:

int main(){
    while(1) printf("Hi\n");
}

这真的重复了吗?如果我将while(1)放在没有printf的情况下,重复次数是否相同?如果不是永远,当堆栈溢出?该计划:

int main(){
    loop:;
    printf("Hi\n");
    goto loop;
}

与第一个相同?如果没有什么区别?

2 个答案:

答案 0 :(得分:6)

您的两个程序是等效的。一个例子:

#include <stdio.h>

void f1(void)
{
    while(1)
        printf("Hi\n");
}

void f2(void)
{
loop:
    printf("Hi\n");
    goto loop;
}

编译:

cc -O3 -c -o example.o example.c

查看输出二进制文件:

example.o:
(__TEXT,__text) section
_f1:
0000000000000000    pushq   %rbp
0000000000000001    movq    %rsp, %rbp
0000000000000004    pushq   %rbx
0000000000000005    pushq   %rax
0000000000000006    leaq    L_str1(%rip), %rbx ## literal pool for: "Hi"
000000000000000d    nopl    _f1(%rax)
0000000000000010    movq    %rbx, %rdi
0000000000000013    callq   _puts
0000000000000018    jmp 0x10
000000000000001a    nopw    _f1(%rax,%rax)
_f2:
0000000000000020    pushq   %rbp
0000000000000021    movq    %rsp, %rbp
0000000000000024    pushq   %rbx
0000000000000025    pushq   %rax
0000000000000026    leaq    L_str1(%rip), %rbx ## literal pool for: "Hi"
000000000000002d    nopl    _f1(%rax)
0000000000000030    movq    %rbx, %rdi
0000000000000033    callq   _puts
0000000000000038    jmp 0x30

请注意,它们包含相同的说明。

答案 1 :(得分:4)

是的,while(1)将永远循环,或者至少在您终止进程或机器崩溃之前。它相当于第二个程序。它没有递归,因此不存在堆栈溢出的可能性。