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真实在,先算出了数列和,再赋值~~ 还以为有循环代码。。