|
|
发表于 2006-9-13 20:40:21
|
显示全部楼层
这是源程序
- 1 void fun1(){
- 2 int a[100];
- 3 }
- 4 void fun2(){
- 5 }
复制代码
这是编译之后的汇编代码
- 1 .file "main.c"
- 2 .text
- 3 .globl fun1
- 4 .type fun1, @function
- 5 fun1:
- 6 pushl %ebp
- 7 movl %esp, %ebp
- 8 subl $400, %esp
- 9 leave
- 10 ret
- 11 .size fun1, .-fun1
- 12 .globl fun2
- 13 .type fun2, @function
- 14 fun2:
- 15 pushl %ebp
- 16 movl %esp, %ebp
- 17 popl %ebp
- 18 ret
- 19 .size fun2, .-fun2
- 20 .ident "GCC: (GNU) 4.1.1 (Gentoo 4.1.1)"
- 21 .section .note.GNU-stack,"",@progbits
复制代码
第八行 subl $400, %esp 是func1比func2多出的一行,这一句就对应
int a[100];
32位机器上正数占用4个字节,所以要给他把堆栈指针在堆栈里开辟出400个字节的位置来,所以在堆栈中。
你也可以试试在全局变量中定义一个变量试试,他会和程序编译在一起。 |
|