虽然(1)真的无限吗?

Chi*_*ila -3 c loops

我有这个程序:

int main(){
    while(1) printf("Hi\n");
}
Run Code Online (Sandbox Code Playgroud)

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

int main(){
    loop:;
    printf("Hi\n");
    goto loop;
}
Run Code Online (Sandbox Code Playgroud)

和第一个一样?如果没有什么区别?

Car*_*rum 6

你的两个程序是等价的.一个例子:

#include <stdio.h>

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

void f2(void)
{
loop:
    printf("Hi\n");
    goto loop;
}
Run Code Online (Sandbox Code Playgroud)

编译它:

cc -O3 -c -o example.o example.c
Run Code Online (Sandbox Code Playgroud)

查看输出二进制文件:

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
Run Code Online (Sandbox Code Playgroud)

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