gcc的优化效果是这样囧么~~

    技术2024-10-26  23

    linux下 写了个小程序,想查看其生成的汇编代码,如下:

     

    #include<stdio.h>

    int main()

    {

        int i, n = 10,v = 0;;

        for(i = 0; i < n; i++)

            v += i;

    }

     

    命令: gcc  xorl.c -S

     

    ain:

    pushl %ebp

    movl %esp, %ebp

    subl $16, %esp

    movl $10, -8(%ebp)

    movl $0, -12(%ebp)

    movl $0, -4(%ebp)

    jmp .L2

    .L3:

    movl -4(%ebp), %eax

    addl %eax, -12(%ebp)

    addl $1, -4(%ebp)

    .L2:

    movl -4(%ebp), %eax

    cmpl -8(%ebp), %eax

    jl .L3

    leave

    ret

    没优化之前好多行~~

    再换个:gcc  -O2 xorl.c -S # -O2 优化选项?

     

    main:

    pushl %ebp

    movl %esp, %ebp

    popl %ebp

    ret

    优化的真干净...... - -! gcc认为写的都是毫无意义的代码么。。

    C代码结尾处添加 printf("%d/n", v);//终端上该打印点东西吧,然后优化生成汇编代码

     

    main:

    pushl %ebp

    movl %esp, %ebp

    andl $-16, %esp

    subl $16, %esp

    movl $45, 8(%esp)

    movl $.LC0, 4(%esp)

    movl $1, (%esp)

    call __printf_chk

    leave

    ret

    优化是优化,结果是gcc真实在,先算出了数列和,再赋值~~ 还以为有循环代码。。

     

    最新回复(0)