• 145 Posts
  • 11 Comments
Joined 9 months ago
cake
Cake day: June 8th, 2024

help-circle

























  • kiri@ani.socialOPtoProgrammer Animemes@lemmy.worldC chan
    link
    fedilink
    English
    arrow-up
    5
    ·
    edit-2
    12 days ago

    There is one more intresting fact. If you use -O3 flag (for clang -O1, -O2, …) compiler performs tail recursion optimization and transforms the recursion into an infinite loop, so there is no stack overflow.

    Assembly

    gcc -O0

    	.file	"main.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
    	movl	$0, %eax
    	call	main
    	nop
    	popq	%rbp
    	.cfi_def_cfa 7, 8
    	ret
    	.cfi_endproc
    .LFE0:
    	.size	main, .-main
    	.ident	"GCC: (GNU) 14.2.1 20250207"
    	.section	.note.GNU-stack,"",@progbits
    
    

    gcc -O3

    	.file	"main.c"
    	.text
    	.section	.text.startup,"ax",@progbits
    	.p2align 4
    	.globl	main
    	.type	main, @function
    main:
    .LFB0:
    	.cfi_startproc
    	.p2align 1
    	.p2align 4
    	.p2align 3
    .L2:
    	jmp	.L2
    	.cfi_endproc
    .LFE0:
    	.size	main, .-main
    	.ident	"GCC: (GNU) 14.2.1 20250207"
    	.section	.note.GNU-stack,"",@progbits
    
    

    clang -O1

    	.text
    	.file	"main.c"
    	.globl	main                            # -- Begin function main
    	.p2align	4, 0x90
    	.type	main,@function
    main:                                   # @main
    	.cfi_startproc
    # %bb.0:
    	.p2align	4, 0x90
    .LBB0_1:                                # =>This Inner Loop Header: Depth=1
    	jmp	.LBB0_1
    .Lfunc_end0:
    	.size	main, .Lfunc_end0-main
    	.cfi_endproc
                                            # -- End function
    	.ident	"clang version 19.1.7"
    	.section	".note.GNU-stack","",@progbits
    	.addrsig