为了账号安全,请及时绑定邮箱和手机立即绑定

递归中函数内存分配问题

求解一个问题:老师说递归调用自身的时候是给函数分配的独立内存单元,而不是调用的之前的函数,但是我在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 回答

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

0 回复 有任何疑惑可以回复我~
#1

无牙仔 提问者

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

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

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

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

1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Linux C语言结构体
  • 参与学习       118198    人
  • 解答问题       162    个

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

进入课程

递归中函数内存分配问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信