- 论坛徽章:
- 0
|
- #include <stdio.h>
- int count = 0;
- void fun()
- {
- printf("count = %d\n", ++count);
- fun();
- }
- int main()
- {
- fun();
- return 0;
- }
复制代码 ubuntu10.10 gcc4.4.5 不开优化
fun()大约会被递归调用327400次,每次运行这个程序fun的调用次数会有几十次的浮动
编译成的主要汇编码为- fun:
- pushl %ebp
- movl %esp, %ebp
- subl $24, %esp 这句可以看到 每次调用fun()都会给它紧挨着上次的栈继续分配24字节的栈空间,再加上上次调用的返回地址和%ebp入栈
- 占了8个字节 所以每次调用都会使用32字节的栈空间
- movl count, %eax
- addl $1, %eax
- movl %eax, count
- movl count, %edx
- movl $.LC0, %eax
- movl %edx, 4(%esp)
- movl %eax, (%esp)
- call printf
- call fun
复制代码 调用327400次,每次分配32字节栈空间,总共就是327400*32 = 1046400字节,换算过去就是10231M啊 这也太大了吧
求高人解释! |
|