递归中函数内存分配问题

来源:7-2 Linux C递归函数之递归原理

无牙仔

2016-03-21 21:06

求解一个问题:老师说递归调用自身的时候是给函数分配的独立内存单元,而不是调用的之前的函数,但是我在gdb查看函数地址却发现如下现象:

#0  fun (a=1) at main.c:10

#1  0x0000000100000eb7 in fun (a=2) at main.c:8

#2  0x0000000100000eb7 in fun (a=3) at main.c:8

#3  0x0000000100000eb7 in fun (a=4) at main.c:8

#4  0x0000000100000eb7 in fun (a=5) at main.c:8

#5  0x0000000100000f1b in main () at main.c:18

每次递归调用的时候,函数的地址都是一样的,这个怎么解释比较合理呢?谢谢。

写回答 关注

2回答

  • NBAFifa
    2016-03-24 18:02:07
    已采纳

    函数的代码都是一样的,所以地址一样,在栈里的位置是不一样的

    无牙仔

    你好,谢谢你的回答。不过我还有一点不明白,这个地址到底是什么地址,如果代码在栈里的位置不一样,那为什么地址会是一样的呢,应该是栈里的每段空间都有独立的地址吧?谢谢。

    2016-03-26 21:32:41

    共 1 条回复 >

  • NBAFifa
    2016-12-09 11:45:32

    函数在代码段里,一个函数一个入口地址

    栈上的是调用的函数顺序,以及参数和本地变量,代码不在栈里。

    你可以看看PE的格式,就知道了

Linux C语言结构体

C语言的深入,帮助小伙伴们进一步的理解C语言,赶紧看过来

118294 学习 · 162 问题

查看课程

相似问题